防止部分视图加载

Mar*_*ard 5 asp.net-mvc asp.net-mvc-2

如何通过键入http://mydomain.com/site/edit/1来阻止加载部分视图?有没有办法这样做?

/马丁

Lor*_*nzo 8

如果您通过Ajax加载部分,那么您可以检查请求HTTP标头HTTP_X_REQUESTED_WITH是否存在且其值是否等于XMLHttpRequest.

当通过浏览器发出请求时,标头不存在

这是一个非常简单的Action Filter属性实现,可以为您完成工作

public class CheckAjaxRequestAttribute : ActionFilterAttribute
{
    private const string AJAX_HEADER = "X-Requested-With";

    public override void OnActionExecuting( ActionExecutingContext filterContext ) {
        bool isAjaxRequest = filterContext.HttpContext.Request.Headers[AJAX_HEADER] != null;
        if ( !isAjaxRequest ) {
            filterContext.Result = new ViewResult { ViewName = "Unauthorized" };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用它来装饰要检查请求是否为ajax请求的任何操作

[HttpGet]
[CheckAjaxRequest]
public virtual ActionResult ListCustomers() {
}
Run Code Online (Sandbox Code Playgroud)


The*_*yce 5

我相信这个[ChildActionOnly]属性正是你要找的.

[ChildActionOnly]
public ActionResult Edit( int? id )
{
   var item = _service.GetItem(id ?? 0);
   return PartialView( new EditModel(item) )
}
Run Code Online (Sandbox Code Playgroud)

Phil Haack 在这里有一篇文章使用它