是否为ASP.NET MVC控制器操作设置了与AJAX相关的任何属性?

Sae*_*ati 44 asp.net-mvc aop attributes asp.net-mvc-3

我想在ASP.NET MVC中使用部分视图和AJAX调用,这是我第一次使用它.我只是想搜索一下我之前应该知道的是否有什么特别之处,而且我很好奇的是,是否有任何应该设置或与AJAX调用相关的特殊属性?像[ChildActionOnly]或的东西[HttpGet]

Muh*_*hid 79

我不认为ajax有内置属性,但创建一个属性并不太难.你可以像创建AjaxOnly过滤器一样

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

并装饰你的动作方法

[AjaxOnly]
public ActionResult ajaxMethod()
{

}
Run Code Online (Sandbox Code Playgroud)

查看这篇文章,了解实现此属性的另一种方法

  • 它使用`X-Requested-With`标头,这是由Request.IsAjaxRequest()方法读取的标头. (3认同)

小智 18

ASP.NET MVC提供了一种扩展方法来检查Request是否是Ajax请求.您可以使用它来决定是否要返回部分视图或json结果而不是普通视图.

if (Request.IsAjaxRequest())
{
    return PartialView("name");
}
return View();
Run Code Online (Sandbox Code Playgroud)

要将操作方法​​限制为Ajax调用,只能编写自定义属性.在正常请求的情况下,此过滤器将返回404未找到的http异常.

[AttributeUsage(AttributeTargets.Method)]
public class AjaxOnlyAttribute : ActionFilterAttribute
{
     public override void OnActionExecuting(ActionExecutingContext filterContext)
     {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.HttpContext.Response.StatusCode = 404;
            filterContext.Result = new HttpNotFoundResult();
        }
        else
        {
            base.OnActionExecuting(filterContext);
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

[AjaxOnly]
public ActionResult Index() {
    // do something awesome
}
Run Code Online (Sandbox Code Playgroud)