ASP.NET MVC 3将KeyValuePair类型的用户控件绑定到ViewModel

ASP.NET MVC 3将KeyValuePair类型的用户控件绑定到ViewModel,asp.net,asp.net-mvc-3,user-controls,Asp.net,Asp.net Mvc 3,User Controls,我创建了一个继承KeyValuePair的特殊用户控件。 在我的ViewModel中,有一个名为lookup的属性 [UIHint("Lookup")] public KeyValuePair<string, string> lookup { get; set; } 用户控件有一些Jquery语句,用于设置文本框和隐藏字段的值 当我调试控制器的POST方法时,我在Lookup属性中没有看到任何值 但是如果我将属性的类型改为string而不是KeyValuePair 并且也改变了用户

我创建了一个继承KeyValuePair的特殊用户控件。 在我的ViewModel中,有一个名为lookup的属性

[UIHint("Lookup")]
public KeyValuePair<string, string> lookup { get; set; }
用户控件有一些Jquery语句,用于设置文本框和隐藏字段的值

当我调试控制器的POST方法时,我在Lookup属性中没有看到任何值

但是如果我将属性的类型改为string而不是KeyValuePair 并且也改变了用户控件的类型,我看到了一个值

我想我已经很接近了,但我无法理解。

KeyValuePair结构没有默认的无参数构造函数,也不能由模型绑定器实例化。我为您的视图推荐一个仅具有这些属性的自定义模型类

public class CustomControlViewModel
{
    public string Key { get; set; }
    public string Value { get; set; }
}
将KVP转换为该模型类以供查看和/或将该类用作操作的参数

[HttpGet]
public ActionResult Lookup()
{
    return View( new CustomControlViewModel { Value = kvp.Value, Key = kvp.Key } );
}

[HttpPost]
public ActionResult Lookup( CustomControlViewModel lookup )
{
     ...
}
KeyValuePair结构没有默认的无参数构造函数,不能由模型绑定器实例化。我为您的视图推荐一个仅具有这些属性的自定义模型类

public class CustomControlViewModel
{
    public string Key { get; set; }
    public string Value { get; set; }
}
将KVP转换为该模型类以供查看和/或将该类用作操作的参数

[HttpGet]
public ActionResult Lookup()
{
    return View( new CustomControlViewModel { Value = kvp.Value, Key = kvp.Key } );
}

[HttpPost]
public ActionResult Lookup( CustomControlViewModel lookup )
{
     ...
}

非常感谢,这正是我想要的。如果使用Dictionary可以正常工作,那么它为什么不工作?我假设它实现了@MarioLevrero,而没有检查字典的模型绑定器是否使用Add方法来更新字典。非常感谢,这正是我想要的。如果使用Dictionary可以正常工作,那么它为什么不工作,它实现了@MarioLevrero,我假设没有检查字典的模型绑定器是否使用Add方法来更新字典。