将数据从asp.net-mvc传递给javascript的最佳实践

问题描述:

最近我一直在使用ASP.NET MVC和Javascript/jQuery,并且我似乎正朝着我总是需要通过的方向前进一些动态值“to”我的javascript。当脚本是正确的页面,我已经做了这样的事情:将数据从asp.net-mvc传递给javascript的最佳实践

var isEditable = <%=ViewData["editable"]%> 

我想这是怎么快速&容易,就像我会注入一个值HTML。但这味道。真的,真的很糟糕。它打破了Visual Studio的智能感知和代码格式,使我的脚本难以阅读和理解。

它发生在我身上的另一个解决方案是我的数据传递给隐藏字段,并有javascript参考的是...

<input type="hidden" id="editable" value="<%=ViewData["editable"]%>" /> 
var isEditable = $("#editable").attr("value"); 

这可能是更好的,因为它使脚本完整,将允许我将其移动到外部.js文件。但是关于这个解决方案的东西也不是很理想。还是仅仅是我?

任何人都可以推荐解决方案&将数据传递到脚本的最佳实践?如果我的脚本最终严重依赖于我的控制器的视图数据,我是否会走上错误的道路?

+1

将模型中的数据“拉”到AJAX控制器中的某种数据存储如何? – Janie 2009-07-28 22:34:42

+1

我认为AJAX在我所指的类型的案例中会过度...我的脚本通常只需要知道控制器/模型中的几位数据(已经存在于初始页面执行中的数据),所以发出另一个网络呼叫回控制器似乎有点多。 – 2009-07-28 22:45:20

我有时会通过JSON序列写配置对象的页面数据传递给我的网页:

var pageConfig = <%= ServerConfig.ToJson() %>; 

,你需要自己编写的toJSON方法。这可以使页面状态保持良好的状态,这样只有一个地方可以注入服务器值。从这里出来的一切都是纯粹的javascript。在你的榜样,你可以再做:

var isEditable = pageConfig.isEditable; 

即使在外部js文件,如果pageConfig是全球性的。但是,在这种情况下,您应该正确命名空间:MY_APP.pageConfig也许。

您将以这种或那种方式注入该信息。而国际海事组织,你的第一个例子和第二个例子没有什么不同。

另一种解决方案是有一个JS类(或原型?),它将接受一个选项对象。虽然承认,它并没有真正与你给出的例子不同。但是,也许你会想要这样。

$(function() { 
    myClass.init({ isEditable: <%=ViewData["editable"]%>, 
     another: '<%=ViewData["another"]%>' }); 
}); 

我认为@çağdaş提出了一个很好的观点,但请记住也要检查服务器端。如果将字段设置为“只读”,则不会阻止用户修改该标志,更改只读字段并提交。

Ajax的全部业务是以异步方式向加载信息。如果你正在做Ajax的工作(加载信息并将其保存在一个变量中),那么它正在消耗它的力量。为什么不尝试JQuery并使用它的Ajax,或者获取函数来动态加载内容。这将有助于您的网页加载速度更快。