Как я могу запустить код из моего файла макета? - PullRequest
2 голосов
/ 14 марта 2012

Я использовал следующий учебник, чтобы помочь мне создать программу чтения RSS в моем приложении ASP.NET MVC3 Razor:

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 Reader в код моей главной страницы, и он автоматически работал бы на каждой странице.

Есть ли контроллер для страниц макета, который позволяет мне делать то же самое?

Как я могу заставить это работать при каждом вызове страницы макета, не возвращая ничего?


РЕДАКТИРОВАТЬ: Следуя совету @ Себастьяна, я теперь добавил этот код в частичное представление, удалил CT.Models.RssReader.GetRssFeed() из return View() и включил его в файл макета:

 @Html.Partial("_MyPartialView")

Код в этой части View is:

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

Однако я не получаю ошибку времени выполнения:

Ссылка на объект не установлена ​​на экземпляр объекта.

Это ошибка на линии @foreach (var item in Model)

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Вы должны создать частичное представление и добавить туда функциональность.Затем в вашем макете визуализируйте это частичное.

EDIT

Является ли ваше частичное представление действительно частичным?Причина, по которой я это сказал, заключается в том, что перед именем стоит «_», что говорит о том, что это может быть макет (может быть просто соглашение об именах).

Чтобы исправить ошибку ссылки на объект, необходимо добавитьобъявление @Model поверх вашего частичного представления.

Надеюсь, это поможет.

ОБНОВЛЕНИЕ Чтобы использовать другую модель в частичном представлении, вам нужно явно объявить, какиемодель, которую вы собираетесь использовать для рендеринга частичного метода.

@{Html.RenderPartial("../YourFeed", Model.YourFeedModel);}

Дайте мне знать, если это решило вашу проблему.

1 голос
/ 15 марта 2012

Новая ошибка, связанная с тем, что вы не передали модель в частичное представление. Вы можете сделать это со вторым аргументом функции Html.Partial ...

Html.Partial("ViewName", MyModel);

Поскольку я думаю, что вы пытаетесь сделать это на странице макета, вы также можете рассмотреть возможность использования статической ссылки для получения RSS-канала. Так что забудьте о необходимости передать в Model и в вашей части иметь:

@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
   }
}

Надеюсь, что все имеет смысл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...