从控制器传递viewModel对象到asp.net MVC中的视图

时间:2013-05-03 20:18:31

标签: asp.net-mvc

我在控制器中有以下方法

public ActionResult Categorized() 
{ 
    var x=new Test.Models.MobileClass(); 
    return View(x);
}

x对象包含返回xmldocument数据的方法

如何传递此对象以查看访问方法并在浏览器中显示来自xmldocument的数据

我可以使用以下代码显示元素元素

document.writeln("@Model.getxml().ChildNodes.Count");

但是我想使用for循环显示对象的内容,以下代码在javascript中不起作用

var size=parseInt("@Model.Getxml().ChildNodes.Count");
for  (var i=0; i<size; i++)

{

    document.writeln("@Model.Getxml().ChildNodes[i].InnerText");

 }
你可以帮我吗

2 个答案:

答案 0 :(得分:1)

首先,你的观点不应该是调用Getxml并且使用XML DOM。控制器的工作是使用“准备渲染”数据显示视图。这就是ViewModel的用途。

public ActionResult Categorized() 
{ 
    var foo = new Test.Models.MobileClass(); 
    var xml = foo.Getxml();
    var viewData = xml.ChildNodes.Cast<XmlNode>().Select(x => x.InnerText);
    return View(viewData);
}

现在我们将IEnumerable<string>传递给视图,其中只包含我们想要渲染的值。

在视图中,您不应该使用javascript将数据呈现为HTML - 使用视图将数据呈现为HTML - Razor模板引擎非常擅长!有点像...

<ul>
@foreach (var item in Model) {
    <li>@item</li>
}
</ul>

答案 1 :(得分:0)

javascript将失败,因为变量i将在服务器端进行评估,然后不存在。 使用剃须刀在视图中使用foreach:

@foreach(var child in Model.Getxml().ChildNodes)
{
    child.InnerText
}