C# 提交表单时ASP.NET Core排除viewmodel的属性
我有一个控制器/操作/视图,其中包含生成报告的表单C# 提交表单时ASP.NET Core排除viewmodel的属性,c#,asp.net,asp.net-mvc,asp.net-core,C#,Asp.net,Asp.net Mvc,Asp.net Core,我有一个控制器/操作/视图,其中包含生成报告的表单 public async Task<IActionResult> Report(int? entityId, DateTime fromDate, DateTime toDate) { } 从下拉列表中选择一个EntityAccounts选项,将使用将用于/report/操作参数中的fromDate和toDate的值填充两个日期选择器。生成报告时,不需要将其发送回GET操作 然后填充视图中的表单,用户单击“获取报告”。此时,相同的
public async Task<IActionResult> Report(int? entityId, DateTime fromDate, DateTime toDate)
{
}
从下拉列表中选择一个EntityAccounts
选项,将使用将用于/report/
操作参数中的fromDate
和toDate
的值填充两个日期选择器。生成报告时,不需要将其发送回GET操作
然后填充视图中的表单,用户单击“获取报告”。此时,相同的GET操作被命中,但是entityId.HasValue
为true
,fromDate
和toDate
具有下拉列表中的值,因此我拥有生成报告的所有信息。然后生成一个完整的viewmodel并将其返回到同一视图
我看到一些问题:
EntityAccounts
的下拉列表被提交回操作(我可以在查询字符串中看到它)。如前所述,这仅用于用户最初选择值,我不需要将其提交回操作。。我如何防止它被提交
<label asp-for="@Model.EntityAccounts">Entity accounts</label>
<!-- Input -->
<select asp-for="@Model.EntityAccounts" class="form-control" data-toggle="select">
@foreach () { //... generate <option>s }
</select>
实体账户
@foreach(){/…生成s}
您可以使用视图模型属性上的属性来阻止模型绑定器对其进行设置
[BindNever]
public IEnumerable<EntityAccountDTO> EntityAccounts { get; set; }
[BindNever]
公共IEnumerable EntityAccounts{get;set;}
谢谢,如果我将BindNever
和Required
添加到客户端验证中,是否仍会进行客户端验证?例如@globetrotter是的,您仍然可以对模型进行验证。将属性设置为BindNever不会使模型状态无效;它只是忽略了这个属性。但是,如果您的意思是在同一属性上设置BindNever和Required,我不知道您为什么要这样做?我不希望通过验证。我的意思是,在提交表单时,用户应该从EntityAccounts
下拉列表中选择一个EntityAccountDTO
。因此,客户端验证应该说“EntityAccount
是必需的”(如果用户没有从下拉列表中选择选项),但不能将表单提交回服务器。我可能完全错误地组织了这个动作/视图,让一个GET动作来容纳所有这些……有没有任何演示来重现您的问题?您的意思是不想将@Model.EntityAccounts
附加到查询字符串中吗?如果是,服务器端如何使用它?嗨,服务器端不使用它,它只是在第一次填充下拉列表时返回它(但一旦填充了下拉列表,我不需要将值返回到服务器)
[BindNever]
public IEnumerable<EntityAccountDTO> EntityAccounts { get; set; }