c# - ASP.NET Core 3.0 Razor Pages 选择助手不发布值

标签 c# asp.net asp.net-core

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

代码如下:

页面:

<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 项目。

最佳答案

您在尝试将下拉列表绑定(bind)到 SelectedReportId 时使用 ReportSelect 名称,但未指定显式绑定(bind)。只需将您的下拉名称从 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; }

希望它能解决您的问题。

关于c# - ASP.NET Core 3.0 Razor Pages 选择助手不发布值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58128377/

相关文章:

c# - WebDeploy 到服务器会导致 asp.net 信任设置重置为默认值

c# - 添加动态复选框处理 CheckedChanged 事件 ASP.NET

C# 在 asp.net 项目中以编程方式在 IIS 中创建站点

c# - UseExceptionHandler 与 UseStatusCodePagesWithRedirects

c# - Visual Studio 2013.2 无法生成,因为 IIS 正在锁定程序集

c# - 使用 C# 反射读取对象数组的元素

c# - 为所有 Controller 和全局操作的自定义策略设置授权属性

json - 如何在 API JSON 结果中返回文件?

C# RegEx 没有返回它应该返回的内容

c# - 排序列表或二叉搜索树