首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么OnActionExecuted中的MasterName总是为空?

为什么OnActionExecuted中的MasterName总是为空?
EN

Stack Overflow用户
提问于 2010-04-23 20:03:47
回答 2查看 651关注 0票数 0

我正在尝试为我所有的aspx页面更改母版页。由于某些原因,我无法检测到何时为ascx页面调用此函数。任何帮助纠正这一点的人都将不胜感激。

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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方法!通过一种似乎是专门为它设计的方法,您可以准确地获得您想要的东西:)

代码语言:javascript
复制
protected override ViewResult View(string viewName, string masterName, object model)
{
    return base.View(viewName, Request.IsAjaxRequest() ? "Empty" : masterName, model);
}
票数 1
EN

Stack Overflow用户

发布于 2010-04-23 20:09:03

所以你的意思是,当你对.ascx "pages“执行操作时,MasterPage是空的?

.ascx不是页面,它们是UserControls / PartialViews。因此,他们没有母版页。它们可以放在法师或母版页中。但是,如果您的请求返回一个.ascx,它将不会有母版页。)

MVC更新:这很可能是因为的工作方式--所有3个部分(M-V-C)都是完全独立的。这意味着当您的代码在控制器内执行时,我们对视图一无所知。View是选择母版页的视图,而不是控制器。

如果你试图在控制器中改变应用程序的外观(改变主页)--你很可能做错了什么。它的设计首先是与上下文分离的,而您正试图绕过它:)

UPD2:所以你的意思是你想为常规请求返回整个页面+母版页,而对于ajax请求只返回没有母版的页面(好吧,至少是干净的)?你仍然在尝试错误的方法。

以下是我一直在做的事情:

代码语言:javascript
复制
if (!Request.IsAjaxRequest())
    return View(model);
else
    return PartialView("PartialName", model);

完全一样的情况。如果我在浏览器中加载url -它会返回整个页面,包括master和all。如果我稍后使用ajax调用加载它,只需加载部分视图即可。简单和容易。并且仍然遵循MVC方法:)

此外,如果您非常热衷于预先选择主控名称..就像这样做:

代码语言:javascript
复制
return View("ViewName", "MasterName", model);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2698271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档