Генерация частичного представления для навигации в контроллере MVC - PullRequest
2 голосов
/ 15 июля 2011

Я новичок в MCV3 и Razor. До сих пор я Looooooooove это.

В настоящее время у меня есть страница макета с частичной навигацией. Вот пример того, как мой частичный вид может выглядеть сейчас:

<ul id="nav-primary">
  <li>@Html.ActionLink("Facts", "Index", "LearnTheFacts")
    <ul>
      <li>@Html.ActionLink("What are the factors?", "Factors", "LearnTheFacts")</li>
      <li>@Html.ActionLink("How can this site help?", "KnowYourRisk", "LearnTheFacts")</li>
    </ul>
  </li>
  <li>@Html.ActionLink("Event Calendar", "Index", "EventCalendar")</li>
  <li>@Html.ActionLink("Another Topic", "Index", "Hello")
    <ul>
      <li>@Html.ActionLink("Call w/ Values", "Test", "Hello", new { runTest = true }, null)</li>
    </ul>
  </li>
</ul>

Я хотел бы сделать что-то более сложное, что потребовало бы создания навигации по данным в базе данных. Могу ли я сгенерировать приведенный выше код полностью в контроллере и НЕ использовать частичное представление вообще?

В идеале, я бы хотел один вызов контроллера. Весь контент для представления также будет храниться в базе данных. Я считаю, что сгенерированный вывод для навигации будет выглядеть примерно так:

<li>@Html.ActionLink("Menu Title 1", "Factors", "LearnMoreAbout", new { ID = 0 }, null)</li>
<li>@Html.ActionLink("Menu Title 2", "Factors", "LearnMoreAbout", new { ID = 1 }, null)</li>
<li>@Html.ActionLink("Menu Title 3", "Factors", "LearnMoreAbout", new { ID = 2 }, null)</li>
<li>@Html.ActionLink("Menu Title 4", "Factors", "LearnMoreAbout", new { ID = 3 }, null)</li>
<li>@Html.ActionLink("Menu Title 5", "Factors", "LearnMoreAbout", new { ID = 4 }, null)</li>
<li>@Html.ActionLink("Event Calendar", "Index", "EventCalendar")</li>

Это то, что я пишу сам, если делаю это вручную. Я хотел бы сгенерировать его.

Есть идеи? Должен ли я сделать что-то другое? Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

я бы сделал это, используя RenderAction, где метод действия извлечет данные из базы данных и передаст их в качестве модели в представление, которое сгенерирует HTML

public ActionResult Navigation()
{
   var model = //fetch from db;
   return View(model);
}

и, видимо, вы можете сделать что-то вроде

@foreach(var item in Model)
{
   <li>@Html.ActionLink("Menu Title 1", "Factors", "LearnMoreAbout", new { ID = item.ID }
}

RenderAction сгенерирует новый вызов контроллера независимо от того, используете ли вы представление или просто возвращаете содержимое из него

0 голосов
/ 15 июля 2011

Вы можете ... Вы можете вызвать Html.RenderAction и в вашем контроллере вернуть Content ("ваш HTML здесь") Зачем генерировать все из БД, хотя? Код может быть немного уродливым таким образом?

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