【问题标题】:Access cs variables inside javascript在javascript中访问cs变量
【发布时间】:2011-07-07 22:21:33
【问题描述】:

我在 cshtml 页面的 @{} 中有一个 var 变量。我想在 javascript 中访问这个变量。 可能吗?? 我该怎么做??

@{  
    var array=[""];    
}

【问题讨论】:

    标签: c# javascript variables razor


    【解决方案1】:

    您可以尝试以下方法:

    @{
        var array = new [] {"foo", "bar"};
    }
    
    <script type="text/javascript">
        var array = [@Html.Raw(String.Join(",", array.Select(s => "'" + s + "'")))];
    
        alert(array[1]);
    </script>
    

    它将 C# 数组序列化为 JavaScript 数组,格式为 ["foo", "bar"]。

    【讨论】:

    • 我正在处理 Visual Studio 2010 和 MVC3 视图。它确实有效,但它强调了 @Html 部分并显示“条件编译已关闭”。我使用 foreach 填充 cshtml 中的 var 数组,并且项目数可能会不时变化。那么在序列化时是否可以运行循环?我该怎么做??
    • @Html 部分是 HtmlHelper 类型的属性,应该没有问题。我展示的代码适用于任意大小的数组。代码所做的是首先引用所有字符串,然后将它们连接起来,生成另一个字符串“'foo','bar','baz'”,该字符串在页面中输出。
    • 如果我们有一个validationsummery为@Html.ValidationSummary(true, "");在@{} 标记内,是否可以将错误作为字符串传递给@{} 标记内的 var 变量并从 javascript 访问它?我该怎么做??
    • 我想这值得另一个问题:)
    • 如果 "foo" 或 "bar" 包含单引号或以反斜杠结尾怎么办?这不安全。
    【解决方案2】:

    这是您何时可能考虑使用 JSON 的完美示例。假设您正在使用 ASP.NET 网页(而不是 Web 表单/MVC)进行开发,请在您的 App_Code 目录中使用以下代码创建一个名为 Javascript.cshtml 的帮助文件:

    @using System.Web.Script.Serialization;
    
    @helper ToJson(object obj) {
        var ser = new JavaScriptSerializer();
        @Html.Raw(ser.Serialize(obj))
    }
    

    现在,如果您的主页可以像这样引用帮助程序:@Javascript.ToJson(myObj)。因此,在您的页面中,您可能会执行以下操作:

    @{
        var myCSharpObj = new { First = "1st", Second = "2nd" };
    }
    <script language="javascript">
        var myJSObj = @Javascript.ToJson(myCSharpObj);
        alert(myJSObj.Second);
    </script>
    

    【讨论】:

    • 我只是做了几乎完全相同的事情,只是意识到已经有一个内置的帮助器! @Json.Encode。虽然它不会将其转换为“原始”,所以我创建了另一个助手,就像你的一样,但你可以在里面放 @Html.Raw(Json.Encode(obj));。
    【解决方案3】:

    由于该变量实际上并不存在于您的 javascript 正在运行的浏览器中,因此您必须使用某种 AJAX 类型的技术。

    简单的旧 ASMX Web 服务可能是您的最佳选择。

    当然,如果你只是想要它的初始值,你可以在页面的合成过程中将它设置为文字。

    不过,我没有确切格式的经验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2013-09-17
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多