【发布时间】:2011-07-07 22:21:33
【问题描述】:
我在 cshtml 页面的 @{} 中有一个 var 变量。我想在 javascript 中访问这个变量。 可能吗?? 我该怎么做??
@{
var array=[""];
}
【问题讨论】:
标签: c# javascript variables razor
我在 cshtml 页面的 @{} 中有一个 var 变量。我想在 javascript 中访问这个变量。 可能吗?? 我该怎么做??
@{
var array=[""];
}
【问题讨论】:
标签: c# javascript variables razor
您可以尝试以下方法:
@{
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"]。
【讨论】:
这是您何时可能考虑使用 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));。
由于该变量实际上并不存在于您的 javascript 正在运行的浏览器中,因此您必须使用某种 AJAX 类型的技术。
简单的旧 ASMX Web 服务可能是您的最佳选择。
当然,如果你只是想要它的初始值,你可以在页面的合成过程中将它设置为文字。
不过,我没有确切格式的经验。
【讨论】: