在 MVC 布局中呈现动态 class 值
Render dynamic class value in MVC layout
我有一个 MVC 布局页面,大致如下所示
<!DOCTYPE HTML
<html class="prod">
<head>
</head>
<body>
</body>
</html>
我想根据从我的控制器返回的内容动态呈现 class 属性 (prod) 的值。
到目前为止,我尝试了以下变体但没有成功
控制器
[ChildActionOnly]
[AllowAnonymous]
public PartialViewResult Environment()
{
return PartialView("Environment", "prod");
}
查看
@model string
@Model
布局
<html class="@{ Html.RenderAction("Environment", "Site"); }">
这实际上生成了以下内容
<htmlprod class=""></htmlprod>
<html>
</html>
当我使用 ContentResult 时,同样的事情发生了。明确地说,我不想使用 Viewbag。
我想生成一个原始的 HTML 字符串并使用 PartialView 或类似的东西显示它。实际值通过控制器(ioc)的构造函数中的参数检索。
您不需要 return 您的 class 名字的一部分。您可以将 class 名称设置为动态 ViewBag
字典并在您的布局中使用它。
public ActionResult Index()
{
ViewBag.HtmlClass="prod";
return View();
}
并在您的布局中
<html class="@ViewBag.HtmlClass">
</html>
如果您不想使用 ViewBag,您可以创建一个仅 return 字符串的子操作方法。
[ChildActionOnly]
public string Environment()
{
return "production";
}
在您的布局中,
<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;
}
}
WebViewPageExtensions.cs
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>
我有一个 MVC 布局页面,大致如下所示
<!DOCTYPE HTML
<html class="prod">
<head>
</head>
<body>
</body>
</html>
我想根据从我的控制器返回的内容动态呈现 class 属性 (prod) 的值。
到目前为止,我尝试了以下变体但没有成功
控制器
[ChildActionOnly]
[AllowAnonymous]
public PartialViewResult Environment()
{
return PartialView("Environment", "prod");
}
查看
@model string
@Model
布局
<html class="@{ Html.RenderAction("Environment", "Site"); }">
这实际上生成了以下内容
<htmlprod class=""></htmlprod>
<html>
</html>
当我使用 ContentResult 时,同样的事情发生了。明确地说,我不想使用 Viewbag。
我想生成一个原始的 HTML 字符串并使用 PartialView 或类似的东西显示它。实际值通过控制器(ioc)的构造函数中的参数检索。
您不需要 return 您的 class 名字的一部分。您可以将 class 名称设置为动态 ViewBag
字典并在您的布局中使用它。
public ActionResult Index()
{
ViewBag.HtmlClass="prod";
return View();
}
并在您的布局中
<html class="@ViewBag.HtmlClass">
</html>
如果您不想使用 ViewBag,您可以创建一个仅 return 字符串的子操作方法。
[ChildActionOnly]
public string Environment()
{
return "production";
}
在您的布局中,
<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;
}
}
WebViewPageExtensions.cs
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>