【问题标题】:ASP.NET Core 3.0 Razor Pages Select Helper Not Posting ValueASP.NET Core 3.0 Razor Pages Select Helper Not Posting Value
【发布时间】:2020-01-27 09:58:51
【问题描述】:

我正在尝试从 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 项目。

【问题讨论】:

  • 我不确定,但是属性的名称和选择应该是一样的吧?您的 select 似乎被命名为 ReportSelect 并且支持 proeprty 似乎是 SelectedReportId
  • @MatJ 是的,你是对的。谢谢!

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


【解决方案1】:

当您尝试将其绑定到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; }

希望它能解决您的问题。

【讨论】:

  • 谢谢!我在这上面花了太多时间,错过了显而易见的事情。我完全删除了名称,这解决了问题。
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 2020-11-21
  • 2018-03-30
  • 2018-03-17
  • 2018-10-16
  • 2019-07-25
  • 2018-06-07
  • 2019-05-10
相关资源
最近更新 更多