最近,通过绊倒一些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设计不好吗?还有其他选择吗?