【问题标题】:how to write @Html.Raw in js file如何在js文件中写入@Html.Raw
【发布时间】:2011-12-24 05:11:41
【问题描述】:

是否可以在js文件中写入以下行

var lst = @Html.Raw(Json.Encode(ViewBag.List));

【问题讨论】:

  • 你的意思是在变量名前加一个@?
  • @James.Xu 那是剃刀。

标签: javascript asp.net-mvc


【解决方案1】:

您不能在静态 js 文件中使用服务器端代码。您可以在视图中声明此全局变量,然后从单独的 javascript 文件中使用。

【讨论】:

  • 这是一个全局变量,它工作正常。在同一页面中,我正在使用自定义复选框。由于这个 @Html.Raw 复选框不起作用
  • @user930453,我看不到lst js 变量和某些复选框之间的任何关系。当然,除非您的自定义复选框依赖于它。
  • 通过使用自定义复选框,我正在更改复选框的图像。如果我删除此行,图像将正确显示
  • @user930453,所以也许您想向我们展示您的代码,以便我们告诉您它有什么问题?
【解决方案2】:

你可以让你的js文件动态化,比如任何其他asp.net文件,通过重命名 filename.aspx 例如。那么你修改后的“js”文件将类似于:

<%@ Page Title="" Language="C#"  %>
<%
Response.ContentType = "application/x-javascript";
%>
function foo() {
    var a = "<%= myVar %>";
}

您可以使用标准方式将其包含在您的页面中:

<script type="text/javascript" src="filename.aspx"></script>

【讨论】:

    【解决方案3】:

    Html Helpers 只能在视图中使用,而不能在 JavaScript 文件中使用。 为了使事情正常进行,您需要将输入变量写入 View 和 JavaScript 文件中的其余代码。所以,你的代码应该是这样的:

    查看:

    <script>
        var lst = @Html.Raw(Json.Encode(ViewBag.List));
    </script>
    

    访问“lst”的其余代码将驻留在 javaScript 文件中:

    JS 文件:

    $(document).ready(function(){
         // access lst here, rest of the code goes here
    });
    

    注意:不要忘记在视图中包含 JS 文件。

    【讨论】:

      【解决方案4】:

      我最喜欢的解决方案是将参数作为参数提供:

      function foo(parameter) {
         var lst = parameter; 
         ...
      }
      

      在视图中:

      <input type='button' onclick="foo('@Html.Raw(Json.Encode(ViewBag.List))');" />
      

      您也可以使用一个对象来存储每个服务器端属性并将其作为全局属性传递给您的 js。在$(document).ready(); 中进行操作。关于 SO 已经有一个很好的问题,对此有更多的见解。稍后将使用链接进行编辑。

      问候,

      编辑:阅读this SO question,您会发现更多见解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        • 2021-05-20
        • 1970-01-01
        • 2014-09-28
        • 2020-07-02
        • 2020-02-09
        • 1970-01-01
        相关资源
        最近更新 更多