我有一个控制器/操作/视图,其中包含用于生成报告的表格。
public async Task<IActionResult> Report(int? entityId, DateTime fromDate, DateTime toDate)
{
}
在HTTP GET上,我首先检查entityId
是否为空。如果是这样,我假设用户正在导航到/report/
来填充表单字段以生成报告,因此我只返回一个包含有关下拉列表等信息的局部viewmodel:
public class ReportViewModel
{
// ...
// this is populated as user has to choose one of these via dropdown
// to generate a report.
public IEnumerable<EntityAccountDTO> EntityAccounts { get; set; }
// ... other properties left unpopulated at this point
}
从下拉列表中选择一个EntityAccounts
选项将使用两个值选择器填充这些值,这些值将用于fromDate
操作参数中的toDate
和/report/
。生成报告时,不需要将其发送回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>
答案 0 :(得分:0)
您可以在视图模型属性上使用[BindNever]属性,以防止模型绑定程序进行设置。
[BindNever]
public IEnumerable<EntityAccountDTO> EntityAccounts { get; set; }