2015-05-19 41 views
0

我有這樣的控制器代碼:異常時,通過複雜的模型來查看

public async Task<ActionResult> Contact() 
{ 
    var url = @"http://mimijumi-dev.myshopify.com/blogs/news.atom"; 
    string result; 
    using (var httpClient = new HttpClient()) 
    { 
     var request = new HttpRequestMessage(HttpMethod.Get, url); 
     var response = await httpClient.SendAsync(request); 
     result = response.Content.ReadAsStringAsync().Result; 
    } 
    XmlDocument xdoc = new XmlDocument(); 
    xdoc.LoadXml(result); 

    XmlNodeReader xreader = new XmlNodeReader(xdoc); 
    XmlSerializer deserializer = new XmlSerializer(typeof(RssFeedModel)); 
    RssFeedModel rssFeedItem = (RssFeedModel)deserializer.Deserialize(xreader); 
    xreader.Close(); 
    xreader.Dispose(); 

    return View(rssFeedItem); 
} 

deserializer填充這些機型:

[XmlRoot("feed", Namespace = "http://www.w3.org/2005/Atom")] 
public class RssFeedModel 
{ 
    [XmlElement("title")] 
    public string Title { get; set; } 

    [XmlElement("content")] 
    public string Content { get; set; } 

    [XmlElement("link")] 
    public List<Link> link { get; set; } 

    [XmlElement("entry")] 
    public List<Entry> entry { get; set; } 
} 

[XmlRoot("link")] 
public class Link 
{ 
    [XmlAttribute("rel")] 
    public string rel { get; set; } 
    [XmlAttribute("type")] 
    public string type { get; set; } 
} 

[XmlRoot("entry")] 
public class Entry 
{ 
    [XmlElement("id")] 
    public string Id { get; set; } 

    [XmlElement("published")] 
    public DateTime PublishDate { get; set; } 
} 

的觀點很簡單,因爲它只是嘗試顯示計數entry元素:

@Model.entry.Count 

這會引發下面的錯誤N:

出現InvalidOperationException:傳入的ViewDataDictionary型號產品類型爲「web.app.Models.RssFeedModel」,但這個的ViewDataDictionary實例需要類型的模型項目「System.Collections.Generic.List`1 [web.app.Models.RssFeedModel]」。 Microsoft.AspNet.Mvc.ViewDataDictionary.EnsureCompatible(對象的值)

的RssFeedModel有是列表的元素,但它本身不是一個列表(或不應該是基於模型類)。我究竟做錯了什麼?謝謝。

+1

顯示在視圖中的模型聲明 - 即'@model ???'(它顯示您有'@model列表'當它應該是'@model RssFeedModel') –

+0

所示的誤差給出你的問題。這會在_before_到達「@ Model.entry.Count」時發生,最有可能是因爲視圖上的@model聲明錯誤(按@StephenMuecke) –

回答

1

計數只能應用於集合或列表,在這裏您只傳遞單個RSS源項目到視圖。傳遞RSSFeedItem的列表。

public async Task<ActionResult> Contact() 
{ 
    ...... 

    List<RssFeedModel> feeds = new List<RSsFeedModel>(); 

    XmlNodeReader xreader = new XmlNodeReader(xdoc); 
    XmlSerializer deserializer = new XmlSerializer(typeof(RssFeedModel)); 

    feeds.Add((RssFeedModel)deserializer.Deserialize(xreader)); 

    xreader.Close(); 
    xreader.Dispose(); 

    return View(feeds); 
} 
+0

'@ Model.entry.Count'如果獲取屬性的計數'入口'這是模型中的一個集合 - '公開列表 entry {get;組; }' –