将字典数据从视图传递到控制器

时间:2009-11-30 12:56:20

标签: .net asp.net-mvc

前一段时间,我试图将字典数据从我的视图传递给我的控制器。在网上搜索后我能够这样做(记住这是Scott Hanselman的帖子之一)。我的解决方案就像是

<%for(int index=0; index<Model.Count(); index++){
     var property= Model.ElementAt(index);%>
     <input type="hidden" name="<%="properties["+index+"].Key"%>"/>
     <input type="hidden" name="<%="properties["+index+"].Value"%>"/>
<%}%>

public ActionResult Process(IDictionary<string,string> properties)
{
      doSomething();
      return View();
}

代码工作了一段时间,然后我做了一些重构并摆脱了这一块代码。今天,我遇到了一个我想再次传递字典的情况。但无论我怎么努力,动作收到的属性参数始终为null。我尝试了上面的代码和

<%for(int index=0; index<Model.Count(); index++){
     var property= Model.ElementAt(index);%>
     <input type="hidden" name="<%="properties.Keys["+index+"]"%>"/>
     <input type="hidden" name="<%="properties.Values["+index+"]"%>"/>
<%}%>

这两个代码都没有用。我再次搜索,但找不到之前帮助过我的帖子。谁能指出我做错了什么?万分感谢。

更新:原来问题是因为生成的html代码没有连续的递增索引。例如,我得到属性[0],属性[1],属性[3] ......(属性[2]缺失)。所以,遇到这种问题时,萤火虫将成为你最好的朋友。

2 个答案:

答案 0 :(得分:0)

您的索引器位于错误的位置,它必须是属性对象的索引。

<%for(int index=0; index<Model.Count(); index++{
     var property= Model.ElementAt(index);%>
     <input type="hidden" name="<%="properties["+index+"].Key"%>"/>
     <input type="hidden" name="<%="properties["+index+"].Value"%>"/>
<%}%>

答案 1 :(得分:0)

当我遇到这种问题时,我总是检查FormCollection键,以确保它包含观察键,你可以通过在ActionMethod上放置一个断点来实现这一点。

public ActionResult Process(IDictionary<string,string> properties, FormCollection f)

检查“f”是否有正确的键。

您也可以尝试

TryUpdateModel(properties, "properties");