传递Dictionary Key返回查看

时间:2012-09-24 10:30:37

标签: asp.net-mvc-3 c#-4.0

我已经使用viewbag项目将DIctionary传递给了我的视图。

在我看来,我是他们转换回词典:

var date = veiwbag.Dictionary as Dictionary;

我的DCitionary设置如下: Key =日期字符串(“MMM yyyy”)例如 - 2012年9月 value = int - 数据库中日期与键匹配的条目计数。

我很高兴输出这些Key值对。我需要知道,当suer sleect一个条目时,我可以将字符串Key返回到aciton方法来检索该字符串的所有日期。

我是MVC3的新手,所以有点迷失。

我最初的想法是: (这种语法可能会像从内存那样略微扭曲)

<a href="(@Href("/Posts/Previous/"+ @date.Key))">@date.key (@date.value)</a>

我的控制器有动作:

public ActionResult Previous(string date)
{
       ..work on data

      return View(..my results);

}

ActionResult中的代码很好。该链接将我带到我的ActionResult但字符串为null。如何通过

date.key 

作为字符串变量进入ActionResult?我是否会以这种方式解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您使用默认路线,请使用:

public ActionResult Previous(string id)

或您的链接必须如下:

/Posts/Previous?date=sometext

但更好的解决方案是使用@Html.ActionLink

@Html.ActionLink(String.Format("{0} ({1})", date.key, date.value), "Previous", "Posts", new { data = date.Key }, null)

答案 1 :(得分:0)

您可以使用HTML帮助程序生成指向此控制器操作的正确链接:

@Html.ActionLink(
    string.Format("{0} ({1})", date.key, date.value), 
    "Previous", 
    new { date = date.Key }
)

如果您还需要指定控制器名称,则可以使用以下重载:

@Html.ActionLink(
    string.Format("{0} ({1})", date.key, date.value), 
    "Previous", 
    "Posts",
    new { date = date.Key },
    null
)

假设已设置默认路由,则会生成以下标记:

<a href="/Posts/Previous?date=SEP%202012">SEP 2012 (9)</a>

当调用Previous控制器操作时,它将成功传递date的{​​{1}}参数。