如何通过键入http://mydomain.com/site/edit/1来阻止加载部分视图?有没有办法做到这一点?
/马丁
答案 0 :(得分: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" };
}
}
}
您可以使用它来装饰您要检查请求是否是ajax请求的任何操作
[HttpGet]
[CheckAjaxRequest]
public virtual ActionResult ListCustomers() {
}
答案 1 :(得分:5)
我相信您正在寻找[ChildActionOnly]
属性。
[ChildActionOnly]
public ActionResult Edit( int? id )
{
var item = _service.GetItem(id ?? 0);
return PartialView( new EditModel(item) )
}
Phil Haack有一篇文章使用它here