ASP MVC.NET - 如何绑定KeyValuePair?

And*_*nko 11 c# data-binding asp.net-mvc

是否有可能绑定这种财产?

public KeyValuePair<string, string> Stuff { get; set; }
Run Code Online (Sandbox Code Playgroud)

我试图在视图中使用以下代码,但它不起作用:

<%=Html.Text("Stuff", Model.Stuff.Value)%>    
<%=Html.Hidden("Model.Stuff.Key", Model.Stuff.Key)%>
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 8

KeyValuePair<K,V>是一个结构,而不是一个类,所以每次调用你的Stuff属性都会返回一个原始的副本KeyValuePair.因此,当您绑定到Model.Stuff.Value和之后Model.Stuff.Key,您实际上正在处理两个不同的实例KeyValuePair<K,V>,其中没有一个是您的模型中的实例.因此,当它们更新时,它不会更新模型中的Stuff属性... QED

顺便说一句,Key和Value属性是只读的,因此您无法修改它们:您必须替换KeyValuePair实例

以下解决方法应该有效:

型号:

private KeyValuePair<string, string> _stuff;
public KeyValuePair<string, string> Stuff
{
    get { return _stuff; }
    set { _stuff = value; }
}

public string StuffKey
{
    get { return _stuff.Key; }
    set { _stuff = new KeyValuePair<string, string>(value, _stuff.Value); }
}

public string StuffValue
{
    get { return _stuff.Value; }
    set { _stuff = new KeyValuePair<string, string>(_stuff.Key, value); }
}
Run Code Online (Sandbox Code Playgroud)

查看:

<%=Html.Text("Stuff", Model.StuffValue)%>    
<%=Html.Hidden("Model.StuffKey", Model.StuffKey)%>
Run Code Online (Sandbox Code Playgroud)