C#MVC模型绑定到post上的索引数组

时间:2016-07-01 06:37:12

标签: c# arrays asp.net-mvc model-binding

是否可以将绑定模型绑定到已发布的已损坏的索引数组?

<input type='text' name='question[3]' value='answer to question 3' />
<input type='text' name='question[5]' value='whatever here' />
<input type='text' name='question[18]' value='a different ansewr' />

<input type='text' name='multiquestions[4][1]' value='question 4 part 1' />
<input type='text' name='multiquestions[4][2]' value='question 4 part 2' />

理想情况下,我希望我的模型符合以下几行(虽然键入此内容我可以看到稀疏数组键是个问题):

public class MyModel {
  public Dictionary<int,string> questions {get;set;}
  public Dictionary<int, Dictionary<int, string>> multiquestions {get;set;}
}

让MVC模型绑定器完成繁重的工作:

public ActionResult MyAction(MyModel model) {...}

但似乎只能很好地处理非破坏的索引。我需要索引,因为它是我将数据放入数据库的方式。

我宁愿没有一系列描述模型的隐藏字段,例如: <input type=hidden name='questions[0].Key' value='3' /><input type=hidden name='questions[0].Value' value='answer to question 3' />

我已经阅读了关于该主题的Hanselman blog post,建议编写一个自定义模型绑定器,如果没有任何开箱即用,但不知道从哪里开始编写自定义绑定器,我希望有MVC可以“开箱即用”的东西,或者那个somoene已经解决了这个问题

2 个答案:

答案 0 :(得分:0)

经过一番搜索后,事实证明不使用int作为字典键是诀窍。

模型绑定将按照我期望的Dictionary<string, string>Dictionary<string, Dictionary<string, string>>工作,当我在服务器上时,我需要将键解析为int。

答案 1 :(得分:-2)

您可以在访问值

之前检查count或null