Как я могу привязать выбранные свойства модели к странице Razor?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу привязать выбранные свойства модели к странице Razor?

Сообщение Anonymous »

Я только перехожу на Razor Pages и застрял. Вот модель страницы:

Код: Выделить всё

public class ThisPersonPageModel : PageModel
{

[BindProperty]
public MyApp.Models.Person ThisPerson { get; set; }

… OnGet() …

… OnPost() …
}
Эта сущность представляет собой аннотированный класс модели EF Core («модель предметной области») со всеми встроенными ограничениями и проверками. Но в этом конкретном представлении этой сущности отображаются только некоторые свойства модели, и переплетчик хочет связать их все. Поэтому значения полей стираются при сохранении данных. Я ожидал, что смогу комментировать с помощью [BindProperty(Include="Field1,Field2")] (аналогично Bind(Include="Field1,Field2")]' в MVC). Но такая возможность «выбора полей», очевидно, не существует для Razor Pages. Это так? (Или кто-нибудь знает, когда оно появится?)
Для меня это серьезное ограничение, даже препятствие для использования Razor Pages. Я хочу получить прекрасные преимущества DRY от двусторонней привязки модели, в первую очередь проверку на стороне клиента (на основе аннотаций модели) и отсутствие необходимости писать (повторяющийся) код привязки при получении значений. Тем не менее, у меня всегда были модели предметной области (таблицы базы данных) с широкими возможностями (множество свойств), но для каждого представления определенным пользователям (ролям) отображаются только определенные свойства в зависимости от их ситуации, потребностей и разрешений. (Я думаю, что в этом суть того, что такое представление: конкретное окно с данными для конкретного пользователя и ситуации.) Например, человек может обновить некоторые свойства своей учетной записи (например, имя), но только администратор может обновить другие. свойства (например, уровень доступа). Или один и тот же человек работает над разными частями сложной сущности на протяжении всего ее жизненного цикла: заполняя ранние свойства раньше, а более поздние — позже. (Представьте себе пользовательский интерфейс мастера.) Вы не хотите, чтобы ранние свойства удалялись при сохранении более поздних свойств. Для меня этот сценарий является повсеместным и применялся для многих баз данных на протяжении многих лет, разработанных как мной, так и другими.
Я рассмотрел несколько вариантов, но ничего не получилось. Я видел этот ответ во многих местах: «Просто создайте PersonViewModel только со свойствами, необходимыми для этого представления». Но тогда, конечно, это не DRY (идеальная модель предметной области уже существует), и она требует сопоставления с моделью предметной области и из нее, а как насчет всех красивых, сложных ограничений и проверок в модели предметной области? Должны ли они быть воссозданы и в модели локальной страницы? Это в значительной степени положило бы конец для меня. Я видел использование AutoMapper, но не уверен, будет ли он сопоставляться с моделью с меньшим количеством свойств или из нее, и сохранит ли он ограничения и проверки при сопоставлении модели предметной области с моделью страницы. И это просто добавляет уровень сложности WET, который с помощью [BindProperty(Include="Field1,Field2")]' можно было бы легко решить. Мне это кажется серьезным ограничением двусторонней подшивки моделей в Razor Pages. Что мне не хватает? Как лучше всего это сделать? Я приветствую предложенные вами альтернативы и/или исправления моих недоразумений.

Подробнее здесь: https://stackoverflow.com/questions/704 ... razor-page
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»