我正在使用ASP.NET MVC,并希望在我的javascript中获取模型信息。我强烈输入了视图,因此可以在HTML中使用<%= Model.Name %>
来获取模型数据。
但是一旦我在<script>
标签中,当使用&lt;%时,我得不到intellisense(在Visual Studio中),并且信息似乎没有正确呈现。我是否缺少能够在Javascript中使用尖括号方案的东西?
感谢。
澄清:我应该发布我第一次尝试使用的代码。为了详细说明,我正在尝试使用JQuery的$ .getJSON从Model中获取数据(通过Controller),并填充JSON对象。我正在使用的javascript如下:
<script type="text/javascript">
$(document).ready(function() {
$.getJSON("<%=Url.Action("PopulateJournalOptions", "Evaluation", Model.ID) %>", populateJSON);
});
</script>
PopulateJournalOptions是我的控制器操作,评估是我的控制器名称,而Model.ID是我试图传递给它的。顺便说一句,我应该能够使用以下方法实现相同的目标:
<script type="text/javascript">
$(document).ready(function() {
$.getJSON("/Evaluation/PopulateJournalOptions/<%= Model.ID %>", populateJSON);
});
</script>
但即使在这里,我也不确定这些尖括号是否正确使用。它肯定看起来有点偏。谢谢你的帮助。
UDPATE:前进并尝试了上面的第二种方法,确实有效。我仍然无法使用第一种使用Url.Action()的方法,这是一种耻辱,因为我认为这是更好的方法。但是&lt;%标签现在肯定是渲染数据。我猜它只是在没有intellisense的时候扔给我,而且他们并没有像正常那样突出。感谢您的快速回复。对于上面第一个选项的正确格式的任何想法?
答案 0 :(得分:2)
一般来说,&lt;%=%&gt;块只能在Javascript中的引号内使用。因为你在引用的文本中,Intellisense可能无法正常工作。
答案 1 :(得分:2)
它应该工作 - 你的C#应该在JavaScript做客户端之前执行服务器端。 Intellisense可能只是被上下文混淆。
我有时会使用PHP和JavaScript这种技术。
答案 2 :(得分:1)
在将字符串写入脚本标记时需要小心,因为它是javascript,期望字符串具有正确编码的特殊字符。此外,如果该字符串包含类似“&lt; / script&gt;”的内容你冒着浏览器没有运行javascript早期结束脚本块的风险。
编码字符串的简单方法是使用JSON序列化程序,也许是JavaScriptSerializer()。
<script>
var targetUrl = <%= (new JavaScriptSerializer()).Serialize("http://url/") %>;
</script>
我认为这更安全。你想把这个代码放在一个辅助函数中,我只是在那里就地实例化JavaScriptSerializer()所以它是最简单的例子。
这样做的一个副作用是&lt;%=%&gt;表达式不在引号内,这听起来有助于您的原始自动完成支持发布。请注意,Serialize()不仅会正确转义javascript的字符串,还会对'&lt;'进行转义编码和'&gt;'字符,以便“&lt; / script&gt;”场景不可能发生。
答案 3 :(得分:1)
如果我错了,请纠正我,但我从未见过像这样使用的Url.Action:
<%= Url.Action("PopulateJournalOptions", "Evaluation", Model.ID) %>
不应该是这样的吗?
<%= Url.Action("PopulateJournalOptions", "Evaluation", new { ID = Model.ID } ) %>
注意 new {ID = Model.ID}
Url.Action使用对象属性的反射来确定路由值是什么。由于int对象没有字段/属性,因此不会检测任何内容。
答案 4 :(得分:0)
您可以尝试使用单引号:
$.getJSON('<%=Url.Action("PopulateJournalOptions", "Evaluation", Model.ID) %>', populateJSON);