В последнее время, наткнувшись на некоторые CQRS, я хотел отделить концепцию модели представления от концепции запроса (команды), где команда - это то, что публикуется на сервере.Например, у меня нет причин включать списки выбора в то, что публикуется на сервере.Пытаясь это, у меня были некоторые проблемы с дизайном, особенно при игре с MVC-представлениями.
В моей системе есть сложная авторизация на основе ролей, и для этого мне нужно 6 различных представлений для редактирования члена.Все эти представления редактируют личную информацию точно так же, поэтому я создал для нее шаблон редактора.Шаблон редактора имеет модель представления как модель, а не команду.Это потому, что мне нужен список выбора в шаблоне редактора.Это работает хорошо, пока не дойдет до привязки модели - из-за неправильных входных имен.Я знаю, что могу написать входные имена вручную с помощью @ Html.Editor, но я бы предпочел этого не делать.
Мои классы, приведенные ниже, сильно уменьшены для удобства чтения, свойств намного больше.
У меня естьпредставление для редактирования члена.Вот его модель представления:
namespace Features.Members.Edit.AsAdmin
{
public class ViewModel
{
public Command Command { get; set; }
public PersonalInfoViewModel PersonalInfo
=> new PersonalInfoViewModel {Command = Command.PersonalInfo };
}
public class Command
{
public PersonalInfoCommand PersonalInfo { get; set; }
}
}
У меня есть шаблон редактора для PersonalInfoViewModel.cs, который я использую в главном представлении:
@Html.EditorFor(x => x.PersonalInfo)
Другие классы:
namespace Features.Members.Shared.Form.ViewModels
{
public class PersonalInfoViewModel
{
public PersonalInfoCommand Command { get; set; }
public SelectList BusinessAreas { get; set; }
}
}
namespace Features.Members.Shared.Form.Commands
{
public class PersonalInfoCommand
{
public int? BusinessAreaId { get; }
}
}
Теперь мне нужны входы редактора шаблонов для привязки модели к основной Команде.Это означает, что имя входа должно быть:
PersonalInfo.BusinessAreaId
Однако сгенерированные имена полей ввода выглядят так:
<select class="form-control" id="PersonalInfo_Command_BusinessAreaId" name="PersonalInfo.Command.BusinessAreaId"></select>
Можно ли изменить сгенерированные имена ввода?Разве этот дизайн MVC не хорош?Есть ли альтернативы?