我正在尝试为我所有的aspx页面更改母版页。由于某些原因,我无法检测到何时为ascx页面调用此函数。任何帮助纠正这一点的人都将不胜感激。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
var action = filterContext.Result as ViewResult;
if (action != null && action.MasterName != "" && Request.IsAjaxRequest())
{
action.MasterName = "Ajax";
}
base.OnActionExecuted(filterContext);
}发布于 2010-04-24 19:12:07
如果你仍然热衷于根据你的请求是ajax还是非ajax来改变母版页--我只是偶然发现了你正在寻找的东西:
http://devlicio.us/blogs/sergio_pereira/archive/2008/12/05/reusing-views-in-asp-net-mvc-for-ajax-updates.aspx
基本上,不是覆盖BaseController中的OnActionExecuting方法,而是覆盖View方法!通过一种似乎是专门为它设计的方法,您可以准确地获得您想要的东西:)
protected override ViewResult View(string viewName, string masterName, object model)
{
return base.View(viewName, Request.IsAjaxRequest() ? "Empty" : masterName, model);
}发布于 2010-04-23 20:09:03
所以你的意思是,当你对.ascx "pages“执行操作时,MasterPage是空的?
.ascx不是页面,它们是UserControls / PartialViews。因此,他们没有母版页。它们可以放在法师或母版页中。但是,如果您的请求返回一个.ascx,它将不会有母版页。)
MVC更新:这很可能是因为的工作方式--所有3个部分(M-V-C)都是完全独立的。这意味着当您的代码在控制器内执行时,我们对视图一无所知。View是选择母版页的视图,而不是控制器。
如果你试图在控制器中改变应用程序的外观(改变主页)--你很可能做错了什么。它的设计首先是与上下文分离的,而您正试图绕过它:)
UPD2:所以你的意思是你想为常规请求返回整个页面+母版页,而对于ajax请求只返回没有母版的页面(好吧,至少是干净的)?你仍然在尝试错误的方法。
以下是我一直在做的事情:
if (!Request.IsAjaxRequest())
return View(model);
else
return PartialView("PartialName", model);完全一样的情况。如果我在浏览器中加载url -它会返回整个页面,包括master和all。如果我稍后使用ajax调用加载它,只需加载部分视图即可。简单和容易。并且仍然遵循MVC方法:)
此外,如果您非常热衷于预先选择主控名称..就像这样做:
return View("ViewName", "MasterName", model);https://stackoverflow.com/questions/2698271
复制相似问题