为什么不能在视图中使用静态类的静态变量?
例如,假设您有一个设置类:
public static class GlobalVariables
{
public static string SystemColor
{
get { return Properties.Settings.Default.SystemColor; }
}
}
为什么你不能在视图中调用它?
喜欢这样
@using AppName.Models
<html>
<div ><h1 style="color:@GlobalVariables.SystemColor">System Color</h1></div>
</html>
答案 0 :(得分:14)
据我所知,如果您使用适当的using
语句包含类'命名空间,那么可以从ASP.NET MVC中的视图内部访问静态变量:
@using WhateverNamespaceGlobalVariablesIsIn
更重要的是,您不应该直接从视图访问静态变量。为了与MVC模式保持一致,您的所有视图数据都应该可以在视图模型中访问:
public ActionResult MyAction()
{
var model = new MyViewModel();
model.SystemColor = GlobalVariables.SystemColor;
...
return View(model);
}
查看:
@model MyViewModel
<div>
<h1 style="color:@(Model.SystemColor)">System Color</h1>
</div>
如果您需要在布局文件中执行此操作,则可以使用RenderAction
来调用控制器操作并返回部分视图。然后可以将部分键入MyViewModel
,可以按上述方式使用。
答案 1 :(得分:8)
你的全球课程应该像
public class GlobalVariables
{
public static string SystemColor
{
get { return Properties.Settings.Default.SystemColor; }
}
}
并在页面@ AppName .GlobalVariables.SystemColor appname 替换为全局类的命名空间
@using AppName.Models
<html>
<div ><h1 style="color:@AppName.GlobalVariables.SystemColor">System Color</h1></div>
</html>
</p>
答案 2 :(得分:5)
您可以在视图中访问静态变量。有三种方法可以做到这一点:
1)正如Ant P建议的那样,在视图中包含using语句。鉴于GlobalVariables
类的命名空间是AppName.GlobalVariables
:
@using AppName.GlobalVariables
<html>
<div ><h1 style="color:@GlobalVariables.SystemColor">System Color</h1></div>
</html>
2)另一种方法是直接在要访问变量的行中使用命名空间:
<div ><h1 style="color:@AppName.GlobalVariables.SystemColor">System Color</h1></div>
3)最后,您可以将所需的命名空间添加到Views文件夹下的web.config文件中:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Optimization" />
<add namespace="AppName.GlobalVariables" />
</namespaces>
</pages>
</system.web.webPages.razor>
至于将变量粘贴在模型中并将其从那里传递给View ......实际上它符合MVC模式并确保关注点和所有优点的分离。但在我看来,在某些情况下,“坚持模式”被带到了荒谬的程度。在您的情况下,我只是从视图中访问此变量。