【发布时间】:2019-02-17 03:05:02
【问题描述】:
我有一个 .NET Core 项目,我将根据子域加载不同的 Layout.cshtml 页面。
应根据子域在数据库中进行查询,该查询将返回代码。根据我的 ViewStart.cshtml 中的这段代码,我将加载不同的布局。
如何获取子域?在哪里?
【问题讨论】:
标签: c# .net asp.net-core .net-core asp.net-core-2.0
我有一个 .NET Core 项目,我将根据子域加载不同的 Layout.cshtml 页面。
应根据子域在数据库中进行查询,该查询将返回代码。根据我的 ViewStart.cshtml 中的这段代码,我将加载不同的布局。
如何获取子域?在哪里?
【问题讨论】:
标签: c# .net asp.net-core .net-core asp.net-core-2.0
您可以简单地将您自己的逻辑添加到您的视图或全局_ViewStart.cshtml 中,根据您自己的标准选择正确的布局。我过去所做的是添加一个ViewData 属性,所以我的_ViewStart.cshtml 看起来像这样:
@{
Layout = (string)ViewData["_OverwriteLayout"] ?? "_DefaultLayout";
}
所以我只需要在 MVC 管道内的某处设置 ViewData["_OverwriteLayout"] 值。我个人是在ResultFilter 内完成的,因此当返回非视图结果时,逻辑不会运行。
这可能看起来像这样:
public class CustomLayoutResultFilter : IAsyncResultFilter
{
public Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
if (context.Result is ViewResult viewResult)
{
if (context.HttpContext.Request.Host.ToString() == "test.example.com")
viewResult.ViewData["_OverwriteLayout"] = "_TestLayout";
}
return next();
}
}
【讨论】:
您可以创建多个布局,并可以从它们的 ViewStart.cshtml 文件中调用它们。 例如,如果您在与其他布局不同的文件夹中有第二个 _Layout2.cshtml,那么您在此文件夹中创建一个具有此路径的 _ViewStart.cshtml 文件
@{
Layout="~/Views/Shared/[your folder]_Layout2.cshtml"
}
【讨论】: