我正在使用ajax加载一个局部视图,以便在kendo网格中添加/编辑一行。当我按下行中的编辑按钮时,我还希望不允许用户直接从浏览器调用Home/AddModify操作。
如果我将[ChildActionOnly]放到我的"AddModify“操作中,它不会让我加载部分视图,因为所有内容都在ajax调用中,我不想让它出现在视图中的某个地方,比如@Html.Action("Home/AddModify",model)。我也不想在页面加载时从头开始加载它。
我是否可以调用局部视图,使其仅按需(动态)查看?
发布于 2013-03-18 17:13:32
您需要的是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()
{
}发布于 2013-03-18 17:14:30
您可以在HttpRequestBase上使用IsAjaxRequest扩展方法。
它不会阻止每个用户调用它(除非它是可公开访问的,否则您无法阻止它们)(因为他们可以将头文件修改为任何内容),但对于一般用途,它可能对您有好处。
您可以创建一个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()
{
}https://stackoverflow.com/questions/15472978
复制相似问题