ASP.NET 核心 3.0 Razor 页面中选择"帮助程序不发布值"



我正在尝试从 ASP.NET Core 3.0 Razor 页面页面上的下拉列表中回发选定的值。我每次都找回默认值。我看不到我错过了什么。

这是代码:

页:

<select asp-for="SelectedReportId" class="form-control" name="ReportSelect"
asp-items="@(new SelectList(Model.Reports, nameof(ReportsModel.Id), nameof(ReportsModel.ReportName)))">
</select>

代码隐藏:

[BindProperty]
public int SelectedReportId { get; set; }

这在窗体上呈现如下:

<select class="form-control" name="ReportSelect" data-val="true" data-val-required="The SelectedReportId field is required." id="SelectedReportId">
<option value="1">All People</option>
<option value="2">People Starting With T</option>
</select>

当我发布值时,表单的其余部分通过,但没有任何内容SelectedReportId。我尝试将类型更改为字符串,以防这是一个问题,但随后它只是以 null 而不是 0 传递。我还验证了列表是否正确加载(当然,您可以看到它通过正确呈现的 HTML 加载(。

我尝试了我能想到的所有配置,但没有成功。我甚至将项目克隆到另一台机器上,只是为了在那里进行测试,但我得到了相同的结果。

我正在运行Visual Studio 2019 16.4.0 Preview 1.0,该项目是一个.NET Core 3.0项目。

当您尝试将下拉列表绑定到SelectedReportId而不指定显式绑定时ReportSelect正在使用该名称作为下拉列表。只需将您的下拉名称从ReportSelect替换为SelectedReportId,它就会解决您的问题。

<select asp-for="SelectedReportId" class="form-control" name="SelectedReportId"
asp-items="@(new SelectList(Model.Reports, nameof(ReportsModel.Id),nameof(ReportsModel.ReportName)))">
</select>

或者,如果您不想更改下拉名称,则需要在BindProperty属性中指定属性名称。

[BindProperty(Name="ReportSelect")]
public int SelectedReportId { get; set; }

希望它能解决您的问题。

相关内容

最新更新