具有多个参数的控制器动作

Controller action with multiple parameters

我想了解 我认为 是我的 ASP.NET 核心项目中的模型绑定问题。我有以下 'Index' 控制器操作:

[HttpGet]
public async Task<IActionResult> Index(SortFilterIndexOptions options) { ... }

SortFilterIndexOptions是下面class定义的四个成员:

public class SortFilterIndexOptions
{
    public int SelectedBirdId { get; set; }
    public bool ShowAll { get; set; }
    public bool ShowInTable { get; set; }
    public int page { get; set; }
}

这些使用户能够过滤分页索引页。布尔成员链接到复选框控件。

如果 'ShowAll' bool 成员更改为 TRUE 然后尝试导航到不同的页面,我有一个错误。如下面的屏幕截图所示,url 的 'ShowAll' 参数部分包含两个布尔值 ('ShowAll=true, false'):

这当然会导致解析错误 ('FormatException: String was not recognized as a valid Boolean')。

这里发生了什么?它仅在 'ShowAll' 参数切换为 TRUE 时发生。是路由问题,因为它不遵循默认路由模式吗?还是ModelBinder的问题?我只是想了解发生了什么,以便我可以采取正确的行动。任何帮助将不胜感激...

更新

这现在是 dotnet/Core 存储库上的问题 #3246 ('ModelBinding error with boolean values') on the asp/Home GitHub repository (originally raised by me as issue #1711

错误消息非常清楚...ShowAll=true,false 布尔值无效。

模型联编程序正在从该参数的查询字符串中接收以下字符串 "true,false",然后尝试将其解析为布尔值,如您所见,这将失败。

类似于尝试

bool value = bool.Parse("true,false");

应该只与 ShowAll=true

一起工作

此问题已由 aspnet/Mvc 团队根据问题 #8043 调查。

ModelBinder没有问题。问题是由我的寻呼机代码引起的,它构造了 url。请使用 link 查看完整对话,其中包含 aspnet/Mvc 团队的详细解释和我提供的示例代码。