我可以使用以下代码从MVC ASP.NET传递变量:
var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>';
这对于字符串或整数可以正常工作,但是如何处理字符串数组?我已经尝试以相同的方式传递数组,但变量被设置为System.String[]?
我可以使用以下代码从MVC ASP.NET传递变量:
var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>';
这对于字符串或整数可以正常工作,但是如何处理字符串数组?我已经尝试以相同的方式传递数组,但变量被设置为System.String[]?
var yourJavaScriptArray = @Html.Raw(Json.Encode(Model.YourDotNetArray));
对于更新版本的MVC,请使用:
var yourJavaScriptArray = @Html.Raw(Json.Serialize(Model.YourDotNetArray));
您可以对其进行JSON序列化。这种方法甚至可以传递更复杂的值,而不必担心转义简单引号、双引号等:
var categoriesList = <%= new JavaScriptSerializer().Serialize(new[] { "value1", "value2" }) %>;
编写一个HTML辅助程序会更好:
public static class HtmlExtensions
{
public static string JsonSerialize(this HtmlHelper htmlHelper, object value)
{
return new JavaScriptSerializer().Serialize(value);
}
}
在你的视图中:
<script type="text/javascript">
var categoriesList = <%= Html.JsonSerialize(new[] { "value1", "value2" }) %>;
</script>
这应该可以做到
var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
一句话概括:
var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))];
类似这样的内容:
<script type="text/javascript">
var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>];
</script>
o
包含引号会怎样?如果它包含双引号呢?如果它包含 JavaScript 和 XSS 代码,可能会窃取您的身份验证 cookie?甚至无法想象编写这种代码可能造成的灾难。 - Darin Dimitrov<script type="text/javascript">
var array = @Html.Raw(
Json.Encode(
(Model).Select(m=> new
{
id= m.ID,
name=m.Name
})
)
);
</script>
[{"id":1,"name":"Name of 1"}, {"id":2,"name":"Name of 2"}, ...];
使用 Json.NET
var yourlist = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.YourList))');
var someArray = [<%= Model.SomeArray.Select(x => "'" + x +"'")
.Aggregate((x,y) => x + ", " + y); %>];
我想用 Razor 语法提供一个答案:
我们有一个Dictionary<int, int>
,我们正在渲染它作为 jQuery Sparkline 的 "数组数组" 形式。
var usageData = [ @string.Join(",", Model.UsageData.Select(d => string.Format("[{0},{1}]", d.Key, d.Value)).ToArray()) ];
这是如何使用的:
$('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips });
这是我们在查看源代码时得到的内容:
var usageData = [ [-13,0],[-12,1],[-11,0],[-10,0],[-9,1],[-8,1],[-7,0],[-6,2],[-5,2],[-4,0],[-3,0],[-2,9],[-1,3],[0,4] ];
$('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips });
Json.Encode()
在较新版本的MVC中不再起作用。请改用Json.Serialize(Model.YourDotNetArray)
。 - S.Richmond