如何在控制器中使用Html.Action的RouteValueDictionary值

时间:2013-08-08 05:29:20

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

我在这里使用Html.Action在(Books.cshtml)部分页面中显示一组书籍。

我正在传递路线词典值,但我不知道如何在Controller中获取路线词典值,也是可以在部分页面(“Books.cshtml”)中获取Route Dictionary值。

Index.cshtml

@{RouteValueDictionary objRoute = new RouteValueDictionary();
  objRoute.Add("Book1", "DavinciCode");
  objRoute.Add("Book2", "Pirates");
  objRoute.Add("Book3", "Ghost");
}

@Html.Action("Books", "Home", objRoute)

Books.cshtml(部分页面)

<p style="color:Blue;">
    The list of books are as folows
        <p>@ Book items</p>  
    //Here I need to display list of books (i.e) routevalue Dictionary values
</p>

HomeController中:

public ActionResult Books()
{
    return PartialView();
}

4 个答案:

答案 0 :(得分:0)

您应该能够访问路线数据:

ViewContext.RouteData.Values["controller"]

答案 1 :(得分:0)

它们应该作为方法参数出现 - 您只需要声明您感兴趣的那些:

public ActionResult Books(string Book1, string Book2, string Book3)
{
    return PartialView();
}

答案 2 :(得分:0)

我不认为使用RouteValueDictionary存储您的模型是最好的主意。您知道,您也可以使用部分视图的模型。

我会为部分视图创建一个模型,它代表您需要的数据,即Book的列表。在Book上,您为每本书提供了必要的数据,包括显示图书详细信息视图所需的密钥(即Id属性):

public class Book
{
    public int Id { get; internal set; }
    public string Name { get; internal set; }
    // ...
}

然后你让你的局部视图有一个例如List<Book>中的Books.cshtml

@model IList<Book>


<p style="color:Blue;">
     The list of books are as follows:

     <ul>
          @foreach (var book in @Model)
          {
               @Html.ActionLink(book.Name, "BookDetails", new { id = book.Id }) 
          }
     </ul>

答案 3 :(得分:0)

尝试以下解决方案,它对我来说很好。

CONTROLLER:

public ActionResult Books()
{
   Dictionary<int, string> books = new Dictionary<int, string>() { 
              { 1, "ASP.NET MVC #" }, 
              { 2, "C#" }, 
              { 3, "Razor View" } };
   return PartialView("Books", books);
}

部分视图:

@{
    Layout = null;
}
@model Dictionary<int, string>
<h2>The list of books are as follows:</h2>
<ul>
    @foreach (var book in @Model)
    {
        <li><a href="/Home/BookDetails/@book.Key">@book.Value</a></li> 
    }
</ul>

在视图中(无论您想要显示书籍列表的哪个位置)

@Html.Action("Books", "YOURCONTROLLERNAME")