Ваш вопрос сформулирован таким способом, которым он предлагает мне, чтобы Вы не полностью понимали блокировку. Вы не блокируете данные, Вы блокируете для защиты целостности данных. Объект, который Вы соединяете, несуществен. То, что имеет значение, - то, что Вы соединяете тот же объект в других областях Вашего кода, которые изменяют защищаемые данные.
KeyValuePair
- это структура, а не класс, поэтому каждый вызов вашего свойства Stuff
возвращает копия исходного KeyValuePair
. Итак, когда вы привязываетесь к Model.Stuff.Value
и Model.Stuff.Key
, вы фактически работаете с двумя разными экземплярами KeyValuePair
, ни одна из которых не соответствует вашей модели. Поэтому, когда они обновляются, это не обновляет свойство 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)%>
<%=Html.Text("Stuff.Value", Model.Stuff.Value)%>
Может сработать?