ASP.NET MVC3 Razor中的KeyPairValue

时间:2013-02-18 15:24:39

标签: asp.net-mvc-3 razor

我有一个奇怪的问题。

我在Razor中制作动态表格。我正在使用字典存储动态添加的输入。 我生成这样的代码:

<input type="hidden" value="96" name="Inputs[0].Key">
<input type="text" name="Inputs[0].Value">

我在控制器中收到dictionary。它总是有我添加的元素,但所有元素都是空的。

这是我模特的一部分:

public class MetriceModelTaskSchedule
{
     public IEnumerable<KeyValuePair<long, string>> Inputs { get; set; }
}

这里有什么不妥?

1 个答案:

答案 0 :(得分:2)

  

这里有什么不妥?

KeyValuePair<TKey, TValue>类具有只读的KeyValue属性这一事实。它们没有setter意味着模型绑定器根本无法设置它们的值。

因此,首先要定义视图模型:

public class InputViewModel
{
    public long Key { get; set; }
    public string Value { get; set; }
}

然后:

public class MetriceModelTaskSchedule
{
    public IEnumerable<InputViewModel> Inputs { get; set; }
}

或者你可以使用词典:

public class MetriceModelTaskSchedule
{
    public IDictionary<long, string> Inputs { get; set; }
}

还要确保您已在视图中尊重输入字段的standard naming convention,以便模型绑定器可以成功将它们绑定到您的模型:

<div>
    <input type="text" name="Inputs[0].Key" value="1" />
    <input type="text" name="Inputs[0].Value" value="value 1" />
</div>
<div>
    <input type="text" name="Inputs[1].Key" value="2" />
    <input type="text" name="Inputs[1].Value" value="value 2" />
</div>
...