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

时间:2012-03-14 18:46:39

标签: asp.net asp.net-mvc-3 razor

我使用以下教程帮助我在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());
        }

    }

从我的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)

上的错误

2 个答案:

答案 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
   }
}

希望一切都有意义