我有這樣的控制器代碼:異常時,通過複雜的模型來查看
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有是列表的元素,但它本身不是一個列表(或不應該是基於模型類)。我究竟做錯了什麼?謝謝。
顯示在視圖中的模型聲明 - 即'@model ???'(它顯示您有'@model列表'當它應該是'@model RssFeedModel') –
所示的誤差給出你的問題。這會在_before_到達「@ Model.entry.Count」時發生,最有可能是因爲視圖上的@model聲明錯誤(按@StephenMuecke) –