在MVC中一起使用Ajax.ActionLink和ChildActionOnly失败

时间:2014-09-24 05:58:59

标签: asp.net-mvc razor asp.net-mvc-5

在我看来,我有Ajax.ActionLink

@Ajax.ActionLink("Display Information", "Information"}, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "divCurrentView", InsertionMode = InsertionMode.Replace }

调用替换div的局部视图。一切正常,但当我将[ChildActionOnly]添加到局部视图时,它永远不会被执行

[ChildActionOnly]
public PartialViewResult Information()

是否有不同的方法可以同时使用Ajax.ActionLink[ChildActionOnly]

我想阻止任何人使用网址

导航到该操作

1 个答案:

答案 0 :(得分:6)

ChildActionOnlyAttribute只能与HTML扩展方法一起使用。

ChildActionOnly属性确保只能从视图中调用操作方法作为子方法。我们倾向于使用此属性来防止因用户请求而调用操作方法。

在您的情况下,而不是使用[ChildActionOnly]属性使用AjaxOnly,如下所示:

[AjaxOnly]
public PartialViewResult Information()

这是你如何制作一个

public class AjaxOnlyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if(!filterContext.HttpContext.Request.IsAjaxRequest())
            filterContext.HttpContext.Response.Redirect("/error/404");
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {

    }
}

并像

一样使用它
[AjaxOnly]
public PartialViewResult Information()