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

本文关键字:创建 viewModel 对象 视图 asp net mvc | 更新日期: 2023-09-27 18:11:50

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

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

此代码不能工作,请提供帮助。

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

你把服务器端代码(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[我].InnerText
@Model.Getxml.ChildNodes[我].InnerText

对于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执行其操作时不再存在