在为JavaScript分配Model值时,为什么ASP.Net MVC 2.0中没有智能感知?

djd*_*d87 8 asp.net-mvc intellisense visual-studio-2010 asp.net-mvc-2

我正在尝试在我的内容页面中将一些模型属性添加到我的JavaScript中:

$(document).ready(function () {
    createPager(1, <%=Model.TotalPages %>);
    createUnprocessedPager(1, <%=Model.TotalUnprocessedPages %>);
});
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否是设计的?你不打算将模型属性与JavaScript结合起来吗?或者这是一个错误?

这按预期工作.但是,<% ... %>在实际编写代码时,我在标记中没有任何Intellisense .如果我在<script>标签中写任何代码,那么就没有Intellisense.如果我直接去标签下</script>和类型<% Model.... %>,然后繁荣,我再次有智能感知.

更新:22/10/2010

刚刚阅读Scott Guthrie的最新博客文章,看来这个功能很快就会推出ASP.Net MVC 3即将推出(也可能用于测试版):

注意:本月早些时候的Beta版尚未启用Razor文件中的Visual Studio代码/标记智能感知和着色.你会看到这会在几周后出现 - 它将支持Razor文件中HTML,JavaScript,CSS和C#/ VB代码的完整代码智能感知.

Yak*_*ych 5

我认为也没有语法突出显示.不确定这是一个错误还是一个功能,但是AFAIK,以这种方式组合代码并不是一个好习惯.通常内联javascript不是一个好习惯,但是如果你使用它,将模型属性与它结合起来,然后决定将脚本提取到一个单独的js文件中,你的代码就会中断.因此,使用您的Model属性填充隐藏字段并使用jQuery在js中读取它们是很常见的,例如:

<input type="hidden" id="valTotalPages" value="<%=Model.TotalPages %>" />
<input type="hidden" id="valTotalUnprocessedPages" value="<%=Model.TotalUnprocessedPages %>" />

... 

// in js
$(document).ready(function () {
    createPager(1, $("#valTotalPages").val());
    createUnprocessedPager(1, $("#valTotalUnprocessedPages").val());
});
Run Code Online (Sandbox Code Playgroud)

因此缺乏语法突出显示和智能感知可能是一个错误,但也可能是一种阻止某些代码模式的方法.

  • 注意:当你执行`value ="<%= Model.TotalPages%>"`时,你仍然会失去智能感知.每当你在引号中包装`<%%>`时就会发生这种情况. (2认同)
  • @Russel Yang:这不仅仅是一个intellisense问题.除非你如何从外部js文件访问该值? (2认同)
  • @Russel Yang:这种技术实际上可能会减少总下载量,因为您将javascript移出页面并进入可缓存的外部js文件. (2认同)

Joh*_*ert 1

您将在引号“”之类的属性内的视图中失去智能感知。

<input type="text" value="<%= DateTime.Today.ToShortDateString() %>" />
Run Code Online (Sandbox Code Playgroud)

或者如果它出现在 Javascript 块内。

<script type="text/javascript">
    <%= DateTime.Today.ToShortDateString() %>
    </script>
Run Code Online (Sandbox Code Playgroud)

我认为在这些场景中应该有 Intellisense,所以我会说这是一个错误,并希望 Visual Studio 的未来更新能够解决并解决这个问题。