代码之家  ›  专栏  ›  技术社区  ›  Al Katawazi

在MVC框架中的javascript文件中使用内联C

  •  13
  • Al Katawazi  · 技术社区  · 17 年前

    我正在尝试让内联C使用MVC框架在我的javascript文件中工作。我编写了这个小测试代码。

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

    当在视图内部使用此代码时,它将完美工作。当我离开ASPX视图并在一个javascript文件中尝试这个操作时,我会得到非法的XML字符。我认为这是在MVC框架中设计的,但是我还没有在网上找到任何相关的资料。

    是否有人让inline c使用MVC框架在javascript文件中工作?

    9 回复  |  直到 12 年前
        1
  •  14
  •   Community Mohan Dere    9 年前

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

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

    按比例增加 SLaks' answer :

    将内容类型设置为 text/javascript ,并将您的javascript源 直接地 在下面 <%@ Page 指令(无 <script> 标签)。

    注意,在vs.

        2
  •  4
  •   Serhat Ozgel    17 年前

    .aspx文件是MVC框架的视图文件。框架只呈现视图和局部视图。我认为不存在在JavaScript文件中使用服务器端代码的方法。

    您可以在隐藏字段中包含您的消息

    <%-- This goes into a view in an .aspx --%>
    <%= Html.Hidden("MyMessage", ViewData["Message"]) %>
    

    在你的javascript文件中使用它:

    // This is the js file
    $(document).ready(function() {
        alert($("#MyMessage").attr("value"));
    });
    
        3
  •  4
  •   SLaks    17 年前

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

    将内容类型设置为 text/javascript ,并将您的javascript源 直接地 在下面 <%@ Page 指令(无 <script> 标签)。

    注意,在vs.

        4
  •  4
  •   Community Mohan Dere    9 年前

    增补 Wagner's answer SLaks's answer 实际上,您可以欺骗Visual Studio,让您在其解决方案中获得IntelliSense,如下所示:

    <%if (false) {%><script type="text/javascript"><%} %>
    // your javascript here
    <%if (false) {%></script><%} %>
    

    在他的解决方案中,要求当呈现到页面时, <script> 标记,但它有一个副作用,在Visual Studio中关闭JavaScript IntelliSense。通过上面的内容,Visual Studio将为您提供IntelliSense,同时不呈现 <脚本& GT; 执行时标记。

        5
  •  3
  •   John Saunders    17 年前

    必须由服务器处理内联C才能有意义。当然,它不适用于简单的javascript文件。

        6
  •  2
  •   Joseph    17 年前

    您的Web服务器不处理.js文件,它只向客户机提供这些文件。这与.aspx或其他ASP.NET文件类型不同。在将这些文件提供给客户机之前,服务器会对它们进行解释。

        7
  •  2
  •   Community Mohan Dere    9 年前

    这是一个古老的问题,但是对于那些在未来通过谷歌偶然发现的人来说,最好的解决方案是使用data-*属性来传递变量。可以使用隐藏元素,但也可以使用 <script> 标记自身,并给它一个唯一的ID。

    这里给出了一个完整的例子: https://stackoverflow.com/a/18993844/1445356

        8
  •  1
  •   Rony    17 年前

    当您在单独的文件中包含C代码并将其包含在视图中时,服务器不处理代码,浏览器将调用脚本文件,内联脚本将被视为纯字符串。

    或者,您可以在包含脚本文件时尝试script runat=server,但我不确定此操作的效果。

        9
  •  0
  •   Jamie Nordmeyer    16 年前

    我同意塞哈特的观点。最好是呈现一个HTML隐藏字段,或者,如前所述,转到它的URL。这可以通过Web服务甚至是IHttphandler实现来实现。然后你可以使用一个URL,比如“messages.axd”?ID=17”。