【问题标题】:pass viewModel object from controller to view in asp.net MVC将 viewModel 对象从控制器传递到 asp.net MVC 中的视图
【发布时间】:2013-05-03 20:18:31
【问题描述】:

我在控制器中有以下方法

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");

 }

你能帮帮我吗

【问题讨论】:

  • 如果您的视图中的代码必须知道有关 XML 文档结构的具体细节,您需要一个更好的 ViewModel。
  • javascript 是客户端,在浏览器中,视图和模型是服务器端,您在服务器端生成 html,浏览器接收该 html
  • 您已经问过这个问题一次,并且完全相同的答案仍然适用:stackoverflow.com/q/16351921/1043198

标签: asp.net-mvc


【解决方案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&lt;string&gt; 传递给视图,其中仅包含我们要呈现的值。

在视图中,您不应该使用 javascript 将数据呈现为 HTML - 使用视图将数据呈现为 HTML - Razor 模板引擎非常擅长这一点!比如……

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多