我正在使用ajax加载局部视图,以便在kendo网格中添加/编辑一行。当我按行中的编辑按钮时,我也想让用户不要直接从浏览器调用Home/AddModify
操作。
如果我将[ChildActionOnly]
添加到我的“AddModify”操作中,则不允许我加载局部视图
因为所有内容都在ajax调用中,我不希望在视图中使用@Html.Action("Home/AddModify",model)
。我也不想在加载页面时从头开始加载它。
我是否可以调用局部视图,以便仅按需查看(动态)?
答案 0 :(得分:19)
您需要的是仅限AJAX属性查看this question
声明它就像
public class AjaxOnlyAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.RequestContext.HttpContext.Request.IsAjaxRequest();
}
}
并像
一样使用它[AjaxOnly]
public ActionResult ajaxMethod()
{
}
答案 1 :(得分:3)
您可以在HttpRequestBase上使用IsAjaxRequest扩展方法。
它不会阻止每个用户调用它(在公共访问之前你无法阻止它们)(因为它们可以将标题修改为任何内容),但是对于一般用途它可能对你有好处。
你可以制作一个动作过滤器:
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()
{
}