将服务器端MVC变量传递到JavaScript

9

我正在寻找关于如何将服务器端变量从控制器操作传递到网站HTML标记的最佳和最简单方法,并让它们被网站上的JavaScript使用的反馈。

我正在使用asp.net mvc4并尝试找到建议的方法来实现此目的。


3
谷歌搜索会提供大量结果... - emre nevayeshirazi
3
@emrenevayeshirazi: <讽刺>哦,Stack Overflow上多么有用的评论啊!</讽刺> - Sk8erPeter
1个回答

20

您有几个选择。

其一是在元素中添加data-attributes或id并使用JavaScript获取它们。

使用Razor视图:

<div id="someid" data-name="@item.attribute"></div>

JS:

$('#someid').data('name')
您可以将数据直接呈现在脚本标记中。 使用Razor:
 var somevar = "@item"

您也可以使用Json.Encode编码更复杂的对象。

 var somevar = @Html.Raw(Json.Encode(object))

4
强调 Declan 的答案,如果你使用 var somevar = "@item"; 的方法,必须像他所做的那样将其包含在引号中,否则可能会得到一个语句,其读法为 var somevar = ;。这对于字符串等内容来说似乎很简单,但在处理可为空的布尔值、可为空的整数等时就不那么明显了。 - Nick Albrecht
我建议使用第一种方法(在 div 或隐藏的 input 标签中),以更好地分离内容和代码。一旦您需要在 .cshtml 文件中引入 <script> 标签,就意味着您做错了些什么。 - Nilzor
关闭 - 对于那些使用Web表单的人:请使用var somevar = "<%=item%>"; - Royi Namir
我认为最好的方法是使用data-attr,因为您不需要在UI代码中添加任何依赖项。 function Service() { this.data = $("...").data('info'); }; var service = new Service(); Service.prototype = { doSomething: function() { alert(this.data()); } } - jwize

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接