我正在使用 ajax 加载部分视图,以便在剑道网格中添加/编辑一行。当我按下行中的编辑按钮时,我也希望不允许用户直接Home/AddModify
从浏览器调用操作。
如果我[ChildActionOnly]
执行“AddModify”操作,它不会让我加载部分视图,因为所有内容都在 ajax 调用中,我不想将它放在视图中,例如@Html.Action("Home/AddModify",model)
. 我也不想在页面加载时从头开始加载它。
我可以调用局部视图以便仅按需查看(动态)吗?
我正在使用 ajax 加载部分视图,以便在剑道网格中添加/编辑一行。当我按下行中的编辑按钮时,我也希望不允许用户直接Home/AddModify
从浏览器调用操作。
如果我[ChildActionOnly]
执行“AddModify”操作,它不会让我加载部分视图,因为所有内容都在 ajax 调用中,我不想将它放在视图中,例如@Html.Action("Home/AddModify",model)
. 我也不想在页面加载时从头开始加载它。
我可以调用局部视图以便仅按需查看(动态)吗?
你需要的是一个 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()
{
}
您可以在 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()
{
}