c# - ASP MVC.NET - 如何绑定(bind) KeyValuePair?

标签 c# asp.net-mvc data-binding

是否可以绑定(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.ValueModel.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/

相关文章:

c# - .ContextMenu 和 .ContextMenuStrip 的区别

asp.net - 通过 WEB API 使用 ASP.NET Identity 进行本地登录

data-binding - 数据绑定(bind)文本框

c# - 过滤 ObservableCollection 以仅显示某些项目

c# - 使 c# 函数成为非私有(private)函数,将其标记为最终函数,或密封其声明类型

c# - 使用 LDAP 启用/禁用 AD 用户

c# - c#中图片框的图像之间的转换

asp.net-mvc - Autofac 可以将依赖项注入(inject)到布局 View 文件中吗?

asp.net-mvc - 无法更改该关系,因为在 MVC 4 中一个或多个外键属性不可为 null

angularjs - Angular : scope variable vs function