在ASP.NET MVC中将XML解析后的列表从控制器传递到视图

4
我试图将一个XML列表传递到视图中,但是一旦到达视图,我遇到了困难。
我的控制器:
 public ActionResult Search(int isbdn)
    {
        ViewData["ISBN"] = isbdn;
        string pathToXml= "http://isbndb.com/api/books.xml?access_key=DWD3TC34&index1=isbn&value1=";
        pathToXml += isbdn;
        var doc = XDocument.Load(pathToXml);
        IEnumerable<XElement> items = from m in doc.Elements()
                    select m;

我的视图会是什么样子?我需要加入某种类型的XML数据控制器吗?
3个回答

3
我不知道你是否有意中断了代码的一半。但你可以通过以下方法将控制器操作中的元素传递到视图中:
ViewData["XmlItems"] = items;

那么在你的视图中,你需要调用

<% foreach(XElement e in ViewData["XmlItems"] as IEnumerable<XElement>) { %>
    <!-- do work here -->
<% } %>

谢谢,我不知道你可以通过列表传递视图数据项。哎呀,像我这样的蠢货!!! - bdd

3

首先,您需要将数据返回到视图模型中...

public ActionResult Search(int isbdn)
    {
        ViewData["ISBN"] = isbdn;
        string pathToXml= "http://isbndb.com/api/books.xml?access_key=DWD3TC34&index1=isbn&value1=";
        pathToXml += isbdn;
        var doc = XDocument.Load(pathToXml);
        IEnumerable<XElement> items = from m in doc.Elements()
                    select m;
return view(m);
}

在你的代码后台,你需要继承。
ViewPage < IEnumerable<XElement>>

然后你的ViewData.Model将成为强类型的IEnumerable<XElement>。 这样你就可以像在控制器中一样处理数据。


你怎么从我的代码后台继承viewPage?另外,你的意思是返回view(items)而不是view(m)吗? - bdd

0
我猜你错过了一些代码,因为在这段代码中你没有在任何时候将项目分配给ViewData。
当你尝试访问视图中的items时会发生什么情况?你能否添加来自视图的代码以展示你想要做什么?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接