Asp.net mvc 3 根据发布的域,以不同方式渲染视图

Asp.net mvc 3 根据发布的域,以不同方式渲染视图,asp.net-mvc-3,view,razor,rendering,subdomain,Asp.net Mvc 3,View,Razor,Rendering,Subdomain,Mypage.cshtml有一个页面,有一个域“xxx.com”和一个子域“test.xxx.com”,当我在子域“test.xxx.com”中发布我的站点时,页面的标题会显示一些不同的内容。可能是这样的: @if (--Request.IsSubDomain("test")--) { <h1>Test page: Product</h1> } else { <h1>Product</h1> } @if(--Request.I

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

@if (--Request.IsSubDomain("test")--)
{ 
    <h1>Test page: Product</h1>
}
else
{ 
    <h1>Product</h1>
}
@if(--Request.IsSubDomain(“测试”)--
{ 
测试页面:产品
}
其他的
{ 
产品
}

您不希望在视图中使用此登录名。我个人会将其移动到自定义属性中,或者直接将逻辑包含在控制器中

顺便问一下,问题是什么

编辑:


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

我通常不建议使用
ViewBag
,但如果您只想使用它来呈现标题,请从父控制器对控制器进行子类化,比如说,
GeneralController
,并根据域在那里设置
ViewBag.title
属性

一种替代方法是从包含类似逻辑的基本视图模型中对任何视图模型进行子类化

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的默认布局(或母版页)包括
\u Layout.cshtml
,其标题中已包含以下行:

<title>@ViewBag.Title</title>
@ViewBag.Title

在本例中,我如何知道请求是由主域还是子域发出的test.xxx.com?惊人地类似于