11

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

如果我[ChildActionOnly]执行“AddModify”操作,它不会让我加载部分视图,因为所有内容都在 ajax 调用中,我不想将它放在视图中,例如@Html.Action("Home/AddModify",model). 我也不想在页面加载时从头开始加载它。

我可以调用局部视图以便仅按需查看(动态)吗?

4

2 回答 2

19

你需要的是一个 AJAX only attribte 看看这个问题

像这样声明

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

并像使用它一样

[AjaxOnly]
public ActionResult ajaxMethod()
{

}
于 2013-03-18T09:13:31.660 回答
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()
{
}
于 2013-03-18T09:14:30.250 回答