根据发布的域以不同方式呈现视图

时间:2011-06-28 11:38:33

标签: 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>
}

2 个答案:

答案 0 :(得分:1)

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

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

修改

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

答案 1 :(得分:0)

我通常不建议使用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包含_Layout.cshtml作为其默认布局(或母版页),其中包含以下行:

<title>@ViewBag.Title</title>