Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ajax中使用MVC3 childactiononly属性_Ajax_Asp.net Mvc 3 - Fatal编程技术网

在ajax中使用MVC3 childactiononly属性

在ajax中使用MVC3 childactiononly属性,ajax,asp.net-mvc-3,Ajax,Asp.net Mvc 3,我使用ajax加载局部视图,以便在剑道网格中添加/编辑行。当我按下行中的编辑按钮时,我希望不允许用户从浏览器直接调用Home/AddModify操作 如果我将[ChildActionOnly]放在“AddModify”操作中,则不允许加载局部视图 因为一切都在ajax调用中,我不希望它像@Html.Action(“Home/AddModify”,model)一样出现在视图中。我也不想在加载页面时从一开始就加载它 我是否可以调用局部视图,以便只按需(动态)查看它?您需要的是一个只支持AJAX的属性

我使用ajax加载局部视图,以便在剑道网格中添加/编辑行。当我按下行中的编辑按钮时,我希望不允许用户从浏览器直接调用
Home/AddModify
操作

如果我将
[ChildActionOnly]
放在“AddModify”操作中,则不允许加载局部视图 因为一切都在ajax调用中,我不希望它像
@Html.Action(“Home/AddModify”,model)
一样出现在视图中。我也不想在加载页面时从一开始就加载它


我是否可以调用局部视图,以便只按需(动态)查看它?

您需要的是一个只支持AJAX的属性看看

宣布它像

public class AjaxOnlyAttribute : ActionMethodSelectorAttribute 
    {
        public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
        {
            return controllerContext.RequestContext.HttpContext.Request.IsAjaxRequest();
        }
    }
像这样使用它

[AjaxOnly]
public ActionResult ajaxMethod()
{

}
您可以在HttpRequestBase上使用扩展方法

它不会阻止每个用户调用它(在它公开访问之前,您无法阻止它们)(因为它们可以将标题修改为任何内容),但对于一般用途,它可能对您有好处

您可以制作一个actionfilter:

public class RestrictToAjaxAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
        {
            throw new InvalidOperationException("This action is only available via ajax");
        }
    }
}
并将此属性置于操作之上:

[RestrictToAjax]
public ActionResult YourAction()
{
}

在关于mvc 4的pluralsight教程中,我知道这一点,但我没有想到这一点。对于我来说,使用IsAJaxRequest就足够了,在不是ajax的情况下放置消息或错误页面是可以的。非常感谢IDEA。如果我想返回html页面而不是抛出错误,我该怎么做呢?目前我使用的是filtercontext.Httpcontext.Response.Redirect(“/Infrastructure/InvalidOperation”),您可以将ActionResult实例分配给filtercontext.Result