Я надеюсь, что кто-то может прояснить, как модель должна развиваться с помощью обратных передач, используя следующий пример:
MyModel
public class MyModel
{
public string Text { get; set; }
public List<RadioButtonListItem> Options { get; set; }
public MyModel()
{
//Initialize the options.
this.Options = new List<RadioButtonListItem>()
{
//Setting Text, Value and Group Name. 3rd is selected by default.
new RadioButtonListItem("Item 1", "1", "Options"),
new RadioButtonListItem("Item 2", "2", "Options"),
new RadioButtonListItem("Item 3", "3", "Options", true)
};
}
}
RadioButtonListItem
public class RadioButtonListItem
{
[HiddenInput]
public string Value { get; set; }
[HiddenInput]
public string Text { get; set; }
[HiddenInput]
public string GroupName { get; set; }
[HiddenInput]
public string SelectedValue { get; set; }
[TemplateVisibility(ShowForEdit = false)]
public override bool Selected { get { return string.Equals(this.Value, this.SelectedValue); } set { this.SelectedValue = (value ? this.Value : null); } }
public RadioButtonListItem() { }
public RadioButtonListItem(string value, string text, string groupName) : this(value, text, groupName, false) { }
public RadioButtonListItem(string value, string text, string groupName, bool selected)
{
//...
}
}
- Контроллер запускает индексное представление, передавая новую модель.Параметры по умолчанию, третий вариант выбран по умолчанию.
- Теперь отображаемые поля формы включают в себя в основном всю модель, включая значение, текст и имя группы каждого RadioButtonListItem.
- ПользовательЗаполняет форму и нажимает кнопку Отправить.
- Контроллер HttpPost получает модель.Модель заполняется из опубликованных данных, включая RadioButtonListItems и все их свойства.
- Некоторая запись в форме неверна, поэтому тот же экземпляр модели отправляется обратно в представление, таким образом,записи и выборы пользователя сохраняются.
- Пользователь исправляет ошибку, повторно отправляет форму, все хорошо.
Резюме
Это кажется мне страннымпотому что я на самом деле не думаю, что вам нужно отправлять обратно исходные метаданные, чтобы сохранить состояние модели.Но если вы не отправите его обратно, что вы будете делать?Я могу вспомнить только один другой вариант: во время постбэк создайте второй экземпляр модели и скопируйте выбор пользователя в новый экземпляр и верните его обратно в представление.
Но это не кажется правильныммне.Может кто-нибудь уточнить, как это должно работать?