【问题标题】:Render the view differently depending on the published domain根据发布的域以不同的方式呈现视图
【发布时间】:2011-06-28 11:38:32
【问题描述】:

Mypage.cshtml 有一个页面和一个域“xxx.com”和一个子域“test.xxx.com”,当我在子域“test.xxx.com”中发布我的网站时,页面的标题会显示有些不同。它会是这样的:

@if (--Request.IsSubDomain("test")--)
{ 
    <h1>Test page: Product</h1>
}
else
{ 
    <h1>Product</h1>
}

【问题讨论】:

标签: asp.net-mvc-3 view razor rendering subdomain


【解决方案1】:

您不希望在您的视图中显示此登录信息。我个人会将其移至自定义属性中,或将逻辑直接包含在您的控制器中。

顺便问一下,问题是什么?

编辑:

您可以使用Request.Url.Authority 来确定域。

【讨论】:

  • 在本例中如何知道请求是由主域还是子域发出的 test.xxx.com?
【解决方案2】:

我通常不建议使用ViewBag,但如果您想使用它来呈现标题,请将您的控制器从父控制器子类化,例如 GeneralController 并设置一个 @ 987654323@ 属性基于域。

一种替代方法是从包含类似逻辑的基本视图模型中继承任何视图模型。

public class GeneralController
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if(HttpContext != null)
            ViewBag.Title = GetRequestPath();        
    }

    private string GetRequestTitle()
    {
        if(HttpContext.Request.Path.Contains("test.xxx"))
            return "Test site";
    }
}

然后,任何控制器和随后渲染的视图都将能够使用此 ViewBag.Title 属性。事实上,开箱即用,MVC3 包含 _Layout.cshtml 作为其默认布局(或母版页),其头部已包含以下行:

<title>@ViewBag.Title</title>

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多