1

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

该对象有许多返回不同数据类型(、、、、等 xmldocumentstringint方法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");
}

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

4

2 回答 2

1

您正在混淆服务器端代码 (c#) 和客户端代码 (javascript)

您应该转换 json 或 xml 中的值并放入隐藏字段并在 javascript aka 客户端的 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

于 2013-05-03T05:19:35.807 回答
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 执行其操作时这些值不再存在。

于 2013-05-03T08:54:08.710 回答