在MVC控制器中生成用于导航的部分视图

时间:2011-07-15 19:04:19

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

我是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 个答案:

答案 0 :(得分:2)

我会使用RenderAction来执行此操作,其中action方法将从db获取数据并将其作为模型传递给将生成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将生成对控制器的新调用,无论您使用视图还是仅返回其中的内容

答案 1 :(得分:0)

你可以......你可以调用Html.RenderAction并在你的控制器中返回内容(“你的HTML在这里”) 为什么从数据库中生成所有内容呢?代码可能有点丑陋吗?