我在asp.net mvc中的控制器中创建了一个类的对象,并通过视图模型将其传递给查看页面,
此对象有许多返回不同数据类型的方法(xmldocument
,string
,int
,array
等)
我使用以下方式访问任何方法@Model.Getxml().ChildNodes.Count"
"@Model.Getxml().ChildNodes[0].InnerText
我想在javascript中声明这个对象的变量,并从变量中调用我想要的任何方法,如下所示
var obj=@Model
然后从obj
变量
但是当我为数组中的跟踪元素编写循环时,我遇到了一个问题,如下所示
var size=parseInt("@Model.Getxml().ChildNodes.Count");
for (var i=0; i<size; i++)
{
document.writeln ("@Model.Getxml().ChildNodes[i].InnerText");
}
此代码不起作用,将不胜感激。
答案 0 :(得分:1)
您正在混合服务器端代码(c#)和客户端代码(javascript)
你应该转换json或xml中的值并放入隐藏字段并在javascript即客户端的for循环中处理隐藏字段中的值..
帮助您识别服务器端代码
@Model.Getxml().ChildNodes.Count
和@Model.Getxml.ChildNodes[i].InnerText
是服务器代码,在您的特定情况下无法与Javascript代码结合使用
帮助您识别客户端代码
var size=parseInt(<variable>);
for (var i=0; i<=0; i++)
{
document.writeln ("<Text>");
}
目前我认为它会打印次数
@ Model.Getxml.ChildNodes [I] .InnerText
@ Model.Getxml.ChildNodes [I] .InnerText
答案 1 :(得分:0)
Harsh Baid的回答是在Razor中创建循环,而不是在Javascript中创建循环,即创建一个Razor循环来写出JS的行,如下所示:
<script type="text/javascript">
@foreach(var node in Model.Getxml().ChildNodes)
{
@String.Format("document.writeln(\"{0}\");", node.InnerText)
}
</script>
这将输出如下内容:
<script type="text/javascript>
document.writeln("Inner text 1!");
document.writeln("More inner text!");
document.writeln("etc.");
document.writeln("etc.");
document.writeln("etc.");
</script>
这里,服务器端代码循环遍历这些值,因为它是唯一可以访问它们的东西。然后它有效地用硬编码字符串写出一堆客户端代码。这不是最优雅的解决方案,但它可以帮助您理解差异。
这与你目前正在尝试做的事情形成鲜明对比,即写出Javascript将循环遍历这些值,这是不能做到的,因为当Javascript做它的事情时这些值不再存在。