复选框导致URL中的参数重复
本文关键字:参数 URL 复选框 | 更新日期: 2023-09-27 17:57:45
我们遇到以下问题:如果我们的复选框被选中,我们的url中有两个相同的参数:
http://localhost:63978/Failure?ShowResolvedFailures=true&ShowResolvedFailures=错误
我们几乎可以肯定这与复选框中的隐藏参数有关(请参阅:asp.net mvc:为什么Html.checkbox会生成额外的隐藏输入)
第一个"ShowResolvedFailures"将是由于选中复选框而生成的值。第二个"ShowResolvedFailures"来自我们期望的隐藏属性
但是我们如何从url中删除该参数呢。当然,我们不希望在URL中看到隐藏的参数。
这是我们的代码:
cshtml:
<form asp-controller="Failure" asp-action="Index" method="GET" role="form" id="searchForm" asp-antiforgery="false">
<div class="pull-right">
<span>
Toon opgeloste storingen?
<input asp-for="@Model.ShowResolvedFailures"
type="checkbox"
class="customCheckbox"
onclick="this.form.submit();">
</span>
</div>
控制器.cs:
[HttpGet]
public async Task<IActionResult> Index([FromQuery] FailureIndexViewModel requestModel)
{
var showResolvedFailures = requestModel?.ShowResolvedFailures ?? false;
var searchQuery = new FailureSearchQuery
{
CorrelationId = requestModel?.CorrelationId,
CommandId = requestModel?.CommandId,
ShowResolvedFailures = showResolvedFailures
};
var urlWithQueryString = QueryHelpers.AddQueryString(@"api/tool/failures/search", searchQuery.GetQueryParameters());
var failureOverviewModel = await GetDataAsync<FailureOverviewModel>(urlWithQueryString);
return View("Index", new FailureIndexViewModel
{
CorrelationId = requestModel?.CorrelationId,
CommandId = requestModel?.CommandId,
ShowResolvedFailures = showResolvedFailures
});
}
我个人的观点(可能很愚蠢)是这是设计问题。为复选框创建了两个字段,一个是复选框本身,另一个是隐藏输入。由于某种原因(我不知道),隐藏的输入总是错误的,复选框的值取决于它是否被选中。如果未选中,则查询字符串将为false,因为如果未选中该复选框,则该复选框将不会发送任何内容,而值将为隐藏输入。但当复选框被选中时,它将发送true,而隐藏的输入将发送false,这就是您的情况。我会利用周围的工作。
更换
var showResolvedFailures = requestModel?.ShowResolvedFailures ?? false;
带有
var showResolvedFailures = Request.QueryString["ShowResolvedFailures"].Contains("True") ? true : false;
使用您自己的输入复选框构造,而不是标记助手的asp,这样您就不会使用布尔的默认模板
<input name="@Html.NameFor(m => mShowResolvedFailures)"
type="checkbox"
class="customCheckbox"
onclick="this.form.submit();">