模型绑定到IDictionary <int,ilist <int =“”>&gt;在ASP.Net MVC 2.0 </int,>

时间:2010-07-05 12:56:57

标签: asp.net-mvc

我被困了!!!

请帮助我。

我在mvc 2.0项目中有以下视图模型属性...

public IDictionary<int, IList<int>> SelectedErrorsErrorType { get; set; }

基本上我在一个或多个标签下有一组复选框。这些选项卡类似于英语,德语,法语等。我想使用tabId作为字典键,并选择复选框ID作为字典值(整数列表)。我似乎无法以这种方式绑定我的模型。我之前在stackoverflow上发现要映射到Dictionary Key,我们需要一个隐藏的字段,例如

<input type="hidden" name="<%: String.Format("SelectedErrorsErrorType[{0}].Key", index) %>"value="<%: item.LanguageId %>" />

那很好!但是如何将Value字段映射到我的Key。

任何帮助都将受到高度赞赏。

感谢。

2 个答案:

答案 0 :(得分:1)

这很容易......不知道为什么我一开始就想不出来。

这是我的工作方式......

<input type="hidden" name="<%: String.Format("SelectedErrorsErrorType[{0}].Key", index) %>"
                                                            value="<%: item.LanguageId %>" />

<%: Html.CheckBox(String.Format("SelectedErrorsErrorType[{0}].Value[{1}]", index, counter), false, new { @value = errorType.ErrorTypeId })%>

答案 1 :(得分:0)

这里似乎是解决方案:ASP.NET MVC - Model binding a set of dynamically generated checkboxes - how to

但你也可以使用

public class ErrorType
{
   public int Key { get; set; }
   public int Value { get; set; }
}

public class ViewModel
{
   public IList<ErrorType> PostedValues { get; set; }

   public IDictionary<int, IList<int>> SelectedErrorsErrorType 
   { 
     get { return PostedValues.GroupBy(x => x.Key).ToDictionary(x => x.Key, x => x.Select(y => y.Value).ToList());
     set { /* backward if you need it */ }
   }
}

并绑定到PostedValues。