我最近一直在使用ASP.NET MVC和Javascript / jQuery,我似乎正朝着一个方向前进,我总是需要将一些动态值传递给我的javascript。当脚本在页面中时,我做了类似的事情:
var isEditable = <%=ViewData["editable"]%>
我喜欢这是如何快速和简单而且就像我在HTML中注入一个值一样。但这闻起来。真的,非常糟糕。它打破了Visual Studio的智能感知和代码格式化,使我的脚本难以阅读和理解。
我想到另一个解决方案是将我的数据传递给隐藏字段,并使用Javascript引用...
<input type="hidden" id="editable" value="<%=ViewData["editable"]%>" />
var isEditable = $("#editable").attr("value");
这可能会更好,因为它保持脚本完好无损,并允许我将其移动到外部.js文件。但是这个解决方案的某些东西看起来也不理想。或者只是我?
任何人都可以推荐解决方案&amp;将数据传递到脚本的最佳实践?如果我的脚本最终严重依赖控制器中的viewdata,那么我是走错路吗?
答案 0 :(得分:11)
我有时会通过JSON序列化程序将配置对象写入页面来将数据传递给我的页面:
var pageConfig = <%= ServerConfig.ToJson() %>;
您需要自己编写ToJson方法。这样可以很好地保存页面状态,因此只有一个位置可以注入服务器值。从现在开始的一切都是纯粹的javascript。在您的示例中,您可以执行以下操作:
var isEditable = pageConfig.isEditable;
即使在外部js文件中,如果pageConfig
是全局的。但是,在这种情况下,您应该正确命名它:MY_APP.pageConfig
或许。
答案 1 :(得分:0)
您将以某种方式注入该信息。而IMO,你的第一个例子与第二个例子没有什么不同。
另一种解决方案是拥有一个接受选项对象的JS类(或原型?)。虽然不可否认,但与你给出的例子并没有什么不同。但是,也许你想要这样做。
$(function () {
myClass.init({ isEditable: <%=ViewData["editable"]%>,
another: '<%=ViewData["another"]%>' });
});
答案 2 :(得分:0)
我认为@çağdaş提出了一个很好的观点,但请记得检查服务器端。如果将字段设置为“只读”,则无法阻止用户修改该标志,更改只读字段和提交。
答案 3 :(得分:0)
Ajax的整个业务是异步加载信息。如果你正在做Ajax的工作(加载信息并将其保存在一个变量中),那就是从中获取力量。为什么不尝试使用JQuery并使用它的Ajax,或者使用Get函数动态加载内容。它可以帮助您加快页面加载速度。