Частичные обновления модели 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
{
}
Другие вопросы по тегам