我有一个MVC5应用程序,在HomeController中,我有一个ActionResult定义如下:
public ActionResult BlogRSS()
{
var model = new BlogModel();
string strFeed = "http://webmysite.com/feed";
using (XmlReader reader = XmlReader.Create(strFeed))
{
SyndicationFeed rssData = SyndicationFeed.Load(reader);
model.BlogFeed = rssData;
}
return View(model);
}
然后,对于这个ActionResult,我创建了一个名为BlogRSS
的部分视图,如下所示:
@model MyApp.Models.BlogModel
@{
if (Model.BlogFeed != null)
{
<ul>
@foreach (var post in Model.BlogFeed.Items.ToList().Take(3))
{
<li><a href='@post.Links.First().Uri' target='_blank'>@post.Title.Text</a></li>
}
</ul>
}
}
我的模型定义如下:
public class BlogModel
{
public SyndicationFeed BlogFeed { get; set; }
}
所以,关键是我想在我的_Layout.cshtml文件中调用该部分视图,但是当网站打开时,我会收到标题中指定的错误消息。我想它根本不是调用我的BlogRSS
方法。我在_Layout.cshtml中调用它,如下所示:
<div class="col-md-4">
Blog
<br />
@Html.Partial("BlogRSS")
</div>
如何解决问题,并确保在渲染视图之前也调用相应的ActionResult?
答案 0 :(得分:0)
问题在于您正在调用部分视图,该视图仅在不调用控制器的情况下呈现视图,而传递给该视图的模型为null
。
有几种方法可以解决这个问题:
1)使用Action
代替Partial
@Html.Action("BlogRSS", "Blog")
2)定义一个基本ViewModel,您将传递给每个视图并将您的Feed添加到其中。