我使用以下教程帮助我在ASP.NET MVC3 Razor应用程序中构建RSS阅读器:
但是,与教程示例不同,我希望RSS源显示在每个页面上,因此将其添加到我的布局文件/Views/Shared/_Layout.cshtml
我目前在我的网站上只有2个观看次数,为了让RSS阅读器能够在两个观看点上工作,我在HomeController
中获得了以下代码:
public class HomeController : Controller
{
//
// GET: /Index/
public ActionResult Index()
{
return View(CT.Models.RssReader.GetRssFeed());
}
public ActionResult About()
{
return View(CT.Models.RssReader.GetRssFeed());
}
}
从我的WebForms经验来看,我只需在我的母版页代码中添加RSS阅读器代码,它就会自动在每一页上工作。
是否有布局页面的控制器允许我这样做?
如何在布局页面的每次调用中都能使用它,而不必返回任何内容?
编辑:按照@ Sebastian的建议,我现在已将此代码添加到部分视图中,从CT.Models.RssReader.GetRssFeed()
中删除return View()
并将其包含在我的布局文件中:< / p>
@Html.Partial("_MyPartialView")
此局部视图中的代码是:
<ul>
@foreach (var item in Model)
{
<li>
<a href="@item.Link" target="_blank">@item.Title</a>
</li>
}
</ul>
但是,我没有收到运行时错误:
对象引用未设置为对象的实例。
行@foreach (var item in Model)
答案 0 :(得分:5)
您必须创建局部视图并在其中添加功能。 然后在你的布局中渲染这个部分。
修改强>
您的部分视图真的是部分视图吗?我说的原因是因为你在名字前面有“_”表示它可能是一个布局(可能只是一个命名约定)。
要修复对象引用错误,您必须在局部视图的顶部添加@Model声明。
希望它有所帮助。
<强>更新强> 为了在局部视图中使用不同的模型,您需要显式声明要在render partialmethod上使用哪个模型。
@{Html.RenderPartial("../YourFeed", Model.YourFeedModel);}
如果这解决了您的问题,请告诉我。
答案 1 :(得分:1)
您遇到的新错误是由于您未将模型传递给局部视图。您可以使用Html.Partial
函数的第二个参数...
Html.Partial("ViewName", MyModel);
我认为您正在尝试在布局页面中执行此操作,您还可以考虑使用静态引用来获取RSS源。所以忘记需要传递一个模型并且在你的部分中有:
@foreach (var item in RssRepository.GetFeed())
{
<li>
<a href="@item.Link" target="_blank">@item.Title</a>
</li>
}
这就像一个像......一样的课程。
public static RssRepository
{
public static MyModel GetFeed()
{
return new MyModel();//<- return what you would normally pass as a Model for RSS feeds
}
}
希望一切都有意义