是否可以绑定(bind)这种属性?
public KeyValuePair<string, string> Stuff { get; set; }
我尝试在 View 中使用以下代码,但它不起作用:
<%=Html.Text("Stuff", Model.Stuff.Value)%>
<%=Html.Hidden("Model.Stuff.Key", Model.Stuff.Key)%>
最佳答案
KeyValuePair<K,V>
是一个结构,而不是一个类,所以每次调用你的Stuff
属性(property)返回原件的副本 KeyValuePair
.所以,当你绑定(bind)到 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); }
}
查看:
<%=Html.Text("Stuff", Model.StuffValue)%>
<%=Html.Hidden("Model.StuffKey", Model.StuffKey)%>
关于c# - ASP MVC.NET - 如何绑定(bind) KeyValuePair?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300642/