Код: Выделить всё
public class ThisPersonPageModel : PageModel
{
[BindProperty]
public MyApp.Models.Person ThisPerson { get; set; }
… OnGet() …
… OnPost() …
}
Для меня это серьезное ограничение, даже препятствие для использования Razor Pages. Я хочу получить прекрасные преимущества DRY от двусторонней привязки модели, в первую очередь проверку на стороне клиента (на основе аннотаций модели) и отсутствие необходимости писать (повторяющийся) код привязки при получении значений. Тем не менее, у меня всегда были модели предметной области (таблицы базы данных) с широкими возможностями (множество свойств), но для каждого представления определенным пользователям (ролям) отображаются только определенные свойства в зависимости от их ситуации, потребностей и разрешений. (Я думаю, что в этом суть того, что такое представление: конкретное окно с данными для конкретного пользователя и ситуации.) Например, человек может обновить некоторые свойства своей учетной записи (например, имя), но только администратор может обновить другие. свойства (например, уровень доступа). Или один и тот же человек работает над разными частями сложной сущности на протяжении всего ее жизненного цикла: заполняя ранние свойства раньше, а более поздние — позже. (Представьте себе пользовательский интерфейс мастера.) Вы не хотите, чтобы ранние свойства удалялись при сохранении более поздних свойств. Для меня этот сценарий является повсеместным и применялся для многих баз данных на протяжении многих лет, разработанных как мной, так и другими.
Я рассмотрел несколько вариантов, но ничего не получилось. Я видел этот ответ во многих местах: «Просто создайте PersonViewModel только со свойствами, необходимыми для этого представления». Но тогда, конечно, это не DRY (идеальная модель предметной области уже существует), и она требует сопоставления с моделью предметной области и из нее, а как насчет всех красивых, сложных ограничений и проверок в модели предметной области? Должны ли они быть воссозданы и в модели локальной страницы? Это в значительной степени положило бы конец для меня. Я видел использование AutoMapper, но не уверен, будет ли он сопоставляться с моделью с меньшим количеством свойств или из нее, и сохранит ли он ограничения и проверки при сопоставлении модели предметной области с моделью страницы. И это просто добавляет уровень сложности WET, который с помощью [BindProperty(Include="Field1,Field2")]' можно было бы легко решить. Мне это кажется серьезным ограничением двусторонней подшивки моделей в Razor Pages. Что мне не хватает? Как лучше всего это сделать? Я приветствую предложенные вами альтернативы и/или исправления моих недоразумений.
Подробнее здесь: https://stackoverflow.com/questions/704 ... razor-page