我有一个mvc应用程序,主要是客户端与knockoutjs。 我需要为不同类型的安装配置它,所以我将为某些颜色提供自定义参数。 现在我将所有内容放在客户端的js文件中,但因为这是在应用程序运行时不会改变的东西我想在服务器端放置这个并根据这些自定义参数修改我的视图所以页面将只是使用正确的颜色呈现服务器端。
使用MVC执行此操作的最佳方法是什么?我发现使用的所有答案:ConfigurationManager.GetSection
从web.config文件中读取但是它不是很清楚它是否在mvc中工作,如果之后我需要将值放在模型中并将其附加到视图中。
类似的内容始终是建议的:var somevar = "@item"
但视图中的item
是什么?
答案 0 :(得分:1)
您可以在控制器中设置变量并在视图中使用它,如下所示:
ViewBag.msg="Hello!";
并在视图中获取:
=@ViewBag.msg;
答案 1 :(得分:1)
您可以添加<appSettings
&gt;部分到web.config。在里面添加<add key="" value="" />
个字符串。然后您可以在控制器中使用这样的值,如下所示:
ViewData["YourKey"] = ConfigurationManager.AppSettings["YourKey"]
。
最后,在视图中写一些类似的东西:
var value = @(ViewData["YourKey"])
答案 2 :(得分:1)
扩展其他答案,可以将此值注入您的客户端javascript。如果JS在CSHTML文件中,你只需要做这样的事情:
//Controller Action
public ActionResult SomeAction()
{
ViewBag.Color = "green"; // Get this from ConfigurationManager.AppSettings, database, or anywhere
return View();
}
// on the view
<script type="text/javascript">
var myColor = '@ViewBag.Color';
// use myColor as any other jS variable
</script>
如果您的javascript位于单独的.js文件中,则必须使用.cshtml(或.aspx)中的变量,然后才能在.js文件中使用它。
回答关于item
在视图中的内容的问题:
在这种情况下,它是剃刀页面上的变量。如果视图是强类型的,它将在顶部定义模型,那么Model
是一个可以使用@Model
在页面上使用的变量。如果模型是某种类型的集合,通常人们会遍历它并为集合中的每个项目输出项目,如:
@foreach(var item in Model)
{
<span>@item</span>
}
但变量也可以动态创建,并且可以随意使用,例如:
@{
var item = "some string";
var foo = "bar";
}
然后在你的javascript中使用,如上所述:
<script type="text/javascript">
var item = '@item';
</script>
答案 3 :(得分:1)
你有一些选择。您可以使用ViewBag,ViewData或将其作为模型上的属性。我的偏好是模型方法,因为它保持视图和控制器之间的关系严格和明确定义。
您所指的@通常是剃刀语法,表示接下来是服务器端代码(或将在服务器上加载时执行的代码)。例如@Model是模型,@ item是一个名为item的服务器端变量。在设置采用lambda(model =&gt; model.Description)的web元素时,您还将使用Html助手,其中Description是模型的属性。
所以,你可以做很酷的事情,例如将JavaScript变量设置为在服务器上计算的值。
var temperature = 0; //javascript
temperature = @temperatureCalculation; //@temperatureCalculation is a C# variable that holds the result of a temperature calculation that is done on the server.
有很多关于ViewBags,ViewData,Models和剃刀语法的信息。