Asp.net mvc 在MVC布局中呈现动态类值
我有一个MVC布局页面,大致如下所示Asp.net mvc 在MVC布局中呈现动态类值,asp.net-mvc,asp.net-mvc-4,razor,dynamic,asp.net-mvc-partialview,Asp.net Mvc,Asp.net Mvc 4,Razor,Dynamic,Asp.net Mvc Partialview,我有一个MVC布局页面,大致如下所示 <!DOCTYPE HTML <html class="prod"> <head> </head> <body> </body> </html> 查看 @model string @Model 布局 <html class="@{ Html.RenderAction("Environment", "Site"); }"> 这实
<!DOCTYPE HTML
<html class="prod">
<head>
</head>
<body>
</body>
</html>
查看
@model string
@Model
布局
<html class="@{ Html.RenderAction("Environment", "Site"); }">
这实际上会产生以下结果
<htmlprod class=""></htmlprod>
<html>
</html>
使用ContentResult时也会发生同样的情况。要清楚,我不想使用Viewbag
我想生成一个原始HTML字符串,并使用PartialView或类似的东西显示它。实际值通过控制器(ioc)构造函数中的参数进行检索。返回类名时不需要使用分部。您可以将类名设置为动态
ViewBag
字典,并在布局中使用它
public ActionResult Index()
{
ViewBag.HtmlClass="prod";
return View();
}
在你的布局中
<html class="@ViewBag.HtmlClass">
</html>
在你的布局中
<html class="@Html.Action("Environment","Home")">
</html>
你这个模糊的问题似乎有一些不足之处。控制器不应该负责应用程序在什么环境中执行。我可能会: Global.asax:
public class MvcApplication : System.Web.HttpApplication
{
private const string Environment = "Environment";
protected void Application_Start()
{
this.Application.SetEnvironment(Configuration.AppSettings[Environment]);
}
}
HttpApplicationStateExtensions.cs
internal static HttpApplicationStateExtensions
{
private const string Environment = "Environment";
public static void SetEnvironment(this HttpApplicationState state,
string environment)
{
state.Application[Environment] = environment;
}
public static string GetEnvironment(this HttpApplicationState state)
{
var result = state.Application[Environment];
return result;
}
}
internal static WebViewPageExtensions
{
private const string Environment = "Environment";
public static string GetEnvironment(this WebViewPage page)
{
var result = page.AppState[Environment];
return result;
}
}
WebViewPageExtensions.cs
internal static HttpApplicationStateExtensions
{
private const string Environment = "Environment";
public static void SetEnvironment(this HttpApplicationState state,
string environment)
{
state.Application[Environment] = environment;
}
public static string GetEnvironment(this HttpApplicationState state)
{
var result = state.Application[Environment];
return result;
}
}
internal static WebViewPageExtensions
{
private const string Environment = "Environment";
public static string GetEnvironment(this WebViewPage page)
{
var result = page.AppState[Environment];
return result;
}
}
用法:
<html class="@GetEnvironemnt()">
</html>
谢谢您的回复,但我不想使用ViewBag。在我的问题中,我特别提到了这一点。此外,由于这是一个布局页面,我必须将其添加到每个控制器上的每个操作中,使其不可行。调用一个操作似乎是一种非常昂贵(创建一个控制器并不是微不足道)的方法。出于好奇,Viewbag有什么问题?为什么控制器必须了解哪个环境?这似乎不合逻辑。