MVC ASP& Javascript变量共享

时间:2012-07-03 18:12:22

标签: c# javascript asp.net-mvc razor

我现在已经和MVC合作了一段时间(2个月)并且我很喜欢它。我遇到过一些我无法在语言之间共享变量值的实例。例如。

在javascript / Jquery等中我可以设置cookie。但是服务器无法接受它们。

在C#/ Razor中,我可以设置查询字符串,ViewBags,ViewData,Sessions等。但是因为这是服务器端,客户端javascript无法得到它们。

我想知道的是,如果有一种相当简单的方法,我可以在C#或javascript中设置变量,如字符串,并在其他语言中以前或后回(无关紧要)读取它(即ac #Razor变量由Javascript读取,反之亦然。)

我还没有需要在AJax上使用Json或XML。但如果这有助于我会考虑它。我是新手,所以请原谅我的无知并感谢你的帮助。

4 个答案:

答案 0 :(得分:6)

C# - > JS

将变量放在隐藏的输入字段或data- *属性中,然后只使用Javascript或jQuery来检索这些值。

JS - > C#

使用ajax发回东西,或者你可以设置隐藏输入的值,然后只是对服务器执行正常的POST。

答案 1 :(得分:2)

如果隐藏的字段解决了你的问题,那么恕我直言,我会说这可能是最简单的方法。如果JS必须读取数据,并且您不希望它可见,那么隐藏的字段是有意义的。

但是,我需要有一些相当复杂的数据元素,比如来自数据库,需要以特定方式在JS中初始化 - 例如:事件日历。事件数据是从数据库中读取的,但必须以某种方式将其转换为JS数据分配。

我发现最直接的方法是@ Html.Raw(“无论你需要什么”)它们在视图的循环中,以便View输出Javascript - 听起来很笨,但我只用它来动态数据输出。可能有一种更简洁的方法(很高兴阅读建议),但它可以选择向JS传递更复杂的数据。

顺便提一下,数据会返回到服务器,因为URL是使用查询字符串来制作的(仅针对安全性问题较低的查找数据)。

答案 2 :(得分:2)

还有一个解决方案。您可以使用NewtonsoftJson将整个模型序列化,或仅将模型的某些部分或任何其他服务器变量序列化为json对象:

Javascript&剃刀:

var model = @Html.Raw(JsonConvert.SerializeObject(Model))

问题是使用这种方法可能会因为VS2012和Resharper的愚蠢而出现语法错误。但有一些技巧:Razor/JavaScript and trailing semicolon

答案 3 :(得分:1)

如果它很复杂,你可能想要查看KnockoutJs.com - 它处理javascript的视图模型的序列化,并从你的盘子上做了很多工作。