在MVC框架中使用Javascript文件内的Inline C#

Al *_*azi 13 javascript asp.net-mvc

我正在尝试使用MVC框架使内联C#在我的JavaScript文件中工作.我制作了这个小测试代码.

$(document).ready(function() {
    alert(<%= ViewData["Message"] %>);
});
Run Code Online (Sandbox Code Playgroud)

当在视图内部使用此代码时,它可以完美地工作.当我离开我的aspx视图并在JavaScript文件中尝试这个时,我得到了非法的XML字符.我认为这是MVC框架中的设计,但我无法在网上找到任何相关材料.

有没有人使用MVC框架让内联C#在JavaScript文件中工作?

Gra*_*ner 14

正如其他人所说,服务器没有处理C#.

一个可能的解决方案是使用一个单独的视图,该视图使用相同的模型并输出JavaScript,然后在您的视图中引用该视图<script type="text/javascript" src="yourJSview.aspx"></script>.

根据SLaks的回答添加:

将content-type设置为text/javascript,并将JavaScript源直接放在<%@ Page指令下面(没有<script>标记).

请注意,您不会在VS中获得任何IntelliSense.

  • 精彩解决方案 (2认同)

SLa*_*aks 5

您可以创建一个呈现 JavaScript 的 ASPX 视图。

将 content-type 设置为text/javascript,并将 JavaScript 源代码直接放在指令下方<%@ Page(不带<script>标签)。

请注意,您不会在 VS 中获得任何 IntelliSense。


7wp*_*7wp 5

要添加 Grant Wagner 的答案SLAks 的答案,您实际上可以欺骗 Visual Studio 在他的解决方案中为您提供 IntelliSense,如下所示:

<%if (false) {%><script type="text/javascript"><%} %>
// your javascript here
<%if (false) {%></script><%} %>
Run Code Online (Sandbox Code Playgroud)

在他的解决方案中,要求在渲染到页面时没有<script>标签,但这会产生副作用,会关闭 Visual Studio 中的 JavaScript IntelliSense。通过以上内容,Visual Studio 将为您提供 IntelliSense,同时在<script>执行时不会渲染标签。