在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");
}
此代码不能工作,请提供帮助。
你把服务器端代码(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执行其操作时不再存在