Asp.net 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"); }"> 这实

我有一个MVC布局页面,大致如下所示

<!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有什么问题?为什么控制器必须了解哪个环境?这似乎不合逻辑。