Частичные обновления модели MVC
Я часто оказываюсь в ситуации, когда я хочу только представить и отредактировать некоторые поля из моей модели. Допустим, у меня есть модель, которая отображает адрес, возможно, я просто хочу, чтобы форма обновляла поля города и почтового индекса (плохой пример, но, надеюсь, это объясняет сценарий).
Я знаю два метода:
1) Сохраните ненужные поля в скрытых элементах ввода в форме, или... 2) Создайте модель выделенного представления, которая просто определяет нужные мне поля.
Я предпочитаю вариант № 2, но у меня нет хорошего чистого способа объединения данных из модели представления обратно в "реальную" модель в действии контроллера. На данный момент я придерживаюсь этого подхода...
1) Сохраните запись, которую я бы поместил в скрытом поле на модели представления. 2) Когда страница отправляется обратно, контроллер извлекает исходную запись, и я вручную назначаю каждое поле из модели представления в реальную модель. 3) Сохраняем реальную модель. вернуться в хранилище данных.
Это работает, но это довольно много работы и очень легко пропустить назначение / переназначение, и мне было интересно, если кто-нибудь знал о другом подходе?
1 ответ
Используйте System.ComponentModel.DataAnnotations.MetadataType.
Что-то вроде:
public class BaseClassOfProperties
{
public string Name { get; set; }
}
public interface INameViewableProperties
{
[Display(name = "Your Name")]
string Name { get; set; }
}
public interface INameHiddenProperties
{
//[scaffoldColumn(false)] this completely hides the fields
[UIHint("Hidden")] // i think...
string Name { get; set; }
}
[MetadataType(typeof(INameViewableProperties)]
public class NameViewAbleProperties : BaseClassOfProperties
{
}
[MetadataType(typeof(INameHiddenProperties)]
public class NameHiddenProperties : BaseClassOfProperties
{
}