在asp.net mvc中创建视图中的viewModel对象

时间:2013-05-03 05:04:12

标签: c# javascript asp.net-mvc for-loop

我在asp.net mvc中的控制器中创建了一个类的对象,并通过视图模型将其传递给查看页面,

此对象有许多返回不同数据类型的方法(xmldocumentstringintarray等)

我使用以下方式访问任何方法@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");
}

此代码不起作用,将不胜感激。

2 个答案:

答案 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做它的事情时这些值不再存在。