gpt4 book ai didi

layout - MVC 3 布局和 Controller

转载 作者:行者123 更新时间:2023-12-02 06:09:39 26 4
gpt4 key购买 nike

我正在构建一个 MVC 3 应用程序。应用程序应该能够根据子域名显示不同的布局(例如:customer1.mysite.com ->layout1;customer2.mysite.com ->layout2;等等),它还将具有适用于移动设备和应用程序的布局IE 6。

我已经看到它们是 _ViewStart.cshtml,我可以利用它来执行设置布局的逻辑。但我不明白的是 Controller 在哪里?我应该在 View 中编写所有代码吗?

另一个关于布局的问题如何分解常见行为的代码?你有 Controller 吗?

我在 asp.net MVC2 中看到的最后一个区域概念现在已经过时了吗?有了 Razor?

感谢您的帮助

弗雷德

最佳答案

这听起来是使用 ViewBag 的好时机。

这个想法是在OnActionExecuting期间,您将查找子域并将其放入 ViewBag 中。这可以在其他 Controller 继承的自定义 BaseController 中完成,或者从 ActionFilter 完成。 .

然后,在_ViewStart中,您可以在ViewBag上编写switch语句来控制布局。

例如,这里有一个 ActionFilter,它将填充任何 Razor View 中的 @ViewBag.Subdomain,包括 _ViewStart.cshtml。

public class AddSubdomainToViewDataAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var subdomain = filterContext.HttpContext.Request.Url.Authority.Split('.').First();
var controller = filterContext.Controller as Controller;
controller.ViewData.Add("Subdomain", subdomain);
}
}

然后,使用这个新的 [AddSubdomainToViewData] 属性来装饰您的 Controller 。

最后,在 _ViewStart.cshtml 中,执行如下操作:

@{
Layout = "~/Views/Shared/" + ((@ViewContext.ViewData["Subdomain"] as String) ?? String.Empty) + "_layout.cshtml";
}

这将为每个子域使用不同的 Razor 布局。

关于layout - MVC 3 布局和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com