情景是: -
控制器部分:
public ActionResult GoHt()
{
Dictionary<string, string> col = new Dictionary<string, string>();
col.Add("A", "C");
col.Add("B", "C");
ViewBag.Cols = col;
return View();
}
查看部分:
<input type="hidden" id="HD" name ="HD" value="@ViewBag.Cols" />
在这种情况下,隐藏值不显示哪个id定义的Dictionary元素,而是显示为
<input type="hidden" id="HD" name="HD" value="System.Collections.Generic.Dictionary`2[System.String,System.String]">
这里的问题是,如何将Dictionary元素分配给ViewBag并存储在隐藏字段中。
以及如何在表格提交中提供相同的词典。
控制器:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GoHt(FormCollection formCollection)
{
var Mode = (Dictionary<string, string>)formCollection["HD"].ToString();
}
答案 0 :(得分:2)
对于字典中的每个键,您将需要多个隐藏字段。 Scott Hanselman写了一篇很好的blog post
来解释你的隐藏字段应该如何命名。这样,您就可以在控制器中将值检索为强类型的Dictionary对象。
<input type="text" name="col[0].Key" value="A" />
<input type="text" name="col[0].Value" value="C" />
<input type="text" name="col[1].Key" value="B" />
<input type="text" name="col[1].Value" value="C" />
...
现在您的控制器操作可以直接将字典作为参数:
[HttpPost]
public ActionResult GoHt(Dictionary<string, string> col)
{
// do something with col here ...
}
所以现在剩下的就是遍历字典的值并生成隐藏的字段:
@foreach (var item in (Dictionary<string, string>)ViewBag.Cols)
{
@Html.Hidden("cols.Key", item.Key)
@Html.Hidden("cols.Value", item.Value)
}
答案 1 :(得分:0)
在Controller部分中您可以编写相同的代码。
public ActionResult GoHt()
{
Dictionary<string, string> col = new Dictionary<string, string>();
col.Add("A", "C");
col.Add("B", "C");
ViewBag.Cols = col;
return View();
}
在“查看”页面中,您需要将您的视包数据重新分配给Temp数据,如此
@{
TempData["Dict"] = ViewBag.Cols;
}
现在,在表单提交上,您可以检索像这样的字典值
public ActionResult GoHt(FormCollection formCollection)
{
Dictionary<string, string> obj = (Dictionary<string, string>)TempData["Dict"];
}