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; }