如何从布局文件中运行代码?

Cur*_*urt 2 asp.net razor asp.net-mvc-3

我使用以下教程帮助我在ASP.NET MVC3 Razor应用程序中构建RSS阅读器:

http://weblogs.asp.net/jalpeshpvadgama/archive/2011/08/17/creating-basic-rss-reader-in-asp-net-mvc-3.aspx

但是,与教程示例不同,我希望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());
        }

    }
Run Code Online (Sandbox Code Playgroud)

从我的WebForms经验来看,我只需在我的母版页代码中添加RSS阅读器代码,它就会自动在每个页面上运行.

布局页面是否有控制器允许我这样做?

如何在布局页面的每次调用中都能使用它,而不必返回任何内容?


编辑:按照@ Sebastian的建议,我现在已将此代码添加到部分视图中,CT.Models.RssReader.GetRssFeed()return View()我的布局文件中删除并包含它:

 @Html.Partial("_MyPartialView")
Run Code Online (Sandbox Code Playgroud)

这个局部视图中的代码是:

<ul>
    @foreach (var item in Model)
    {
      <li>
         <a href="@item.Link" target="_blank">@item.Title</a>
      </li>
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

但是,我没有收到运行时错误:

你调用的对象是空的.

这是错误的 @foreach (var item in Model)

Seb*_*iek 5

您必须创建局部视图并在其中添加功能.然后在您的布局中,渲染此部分.

编辑

你的局部视图真的是局部视图吗?我说的原因是因为你在名字前面有"_"表示它可能是一个布局(可能只是一个命名约定).

要修复对象引用错误,必须在局部视图的顶部添加@Model声明.

希望能帮助到你.

更新 为了在局部视图中使用不同的模型,您需要显式声明要在render partialmethod上使用哪个模型.

@{Html.RenderPartial("../YourFeed", Model.YourFeedModel);}
Run Code Online (Sandbox Code Playgroud)

如果这解决了您的问题,请告诉我.