【发布时间】:2019-07-16 08:14:23
【问题描述】:
我有一个控制器/动作/视图,其中包含一个生成报告的表单。
public async Task<IActionResult> Report(int? entityId, DateTime fromDate, DateTime toDate)
{
}
在 HTTP GET 上,我首先检查 entityId 是否为空。如果是,我假设用户正在导航到/report/ 以填充表单字段以生成报告,因此我只返回包含有关下拉列表等信息的部分视图模型:
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 选项会填充两个日期选择器,其值将用于/report/ 操作参数中的fromDate 和toDate。这不需要在生成报告时发送回 GET 操作。
然后填充视图中的表单,用户单击“获取报告”。此时,相同的 GET 操作被命中,但 entityId.HasValue 是 true、fromDate 和 toDate 具有来自下拉列表的值,因此我拥有生成报告的所有信息。然后我生成一个完整的视图模型并将其返回到同一个视图。
我看到的一些问题:
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>
【问题讨论】:
-
是否有任何演示可以重现您的问题?您的意思是您不希望
@Model.EntityAccounts附加到查询字符串?如果是,服务器端如何使用它? -
嗨,服务器端不使用它,它只是在第一次填充下拉列表时返回它(但是一旦填充了下拉列表,我不需要将值返回给服务器)
标签: c# asp.net asp.net-mvc asp.net-core