加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有ChildActionOnly属性问题的部分视图

发布时间:2020-12-15 19:56:14 所属栏目:百科 来源:网络整理
导读:我有部分视图由 jquery呈现,我想使用 jquery刷新视图.这是我的代码的样子. div id="left"input type="button" id="refresh" value="refresh" / @Html.Partial("_LeftColumn",new ColumnViewModel { Attempt= DateTime.Now })/divscript type="text/javascrip
我有部分视图由 jquery呈现,我想使用 jquery刷新视图.这是我的代码的样子.

<div id="left">
<input type="button" id="refresh" value="refresh" />
    @Html.Partial("_LeftColumn",new ColumnViewModel { Attempt= DateTime.Now })
</div>

<script type="text/javascript">
    $('#refresh').click(function () {
        $.ajax({
            type: "post",dataType: "html",url: 'Home/LeftColumnData',data: {},success: function (response) {
                $('#left').html(response);
            }
        });
    });
</script>

在控制器动作中,我这样写了

[ChildActionOnly]
public PartialViewResult LeftColumnData()
{
    var Column= new ColumnViewModel { Attempt= DateTime.Now };
    return PartialView("_LeftColumn",Column);
}

我不希望用户直接从浏览器请求ColumnData,除非通过ajax,但是这种方法我得到下面的错误.

我该怎么做才能删除ChildActionOnly属性并允许直接请求查看?
这个问题有哪些替代方案?

解决方法

你可以使用AjaxOnly

[AjaxOnly]
[HttpPost]
public ActionResult LeftColumnData()
{
    var Column= new ColumnViewModel { Attempt= DateTime.Now };
    return PartialView("_LeftColumn",Column);
}

这是你如何制作一个

public class AjaxOnlyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if(!filterContext.HttpContext.Request.IsAjaxRequest())
            filterContext.HttpContext.Response.Redirect("/error/404");
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {

    }
}

并使用它

[AjaxOnly]
public ActionResult AjaxActionMethod()
{
    ....
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读