Wir sind mit dem folgenden Problem sind mit: Wenn unser Kontrollkästchen aktiviert ist, unsere url hat zwei von den gleichen Parametern darin:Duplizieren der Parameter in URL durch Checkbox verursacht
http://localhost:63978/Failure?ShowResolvedFailures=true&ShowResolvedFailures=false
Wir sind fast sicher, dass das mit dem versteckten Parameter von der Checkbox zu tun hat (Siehe: asp.net mvc: why is Html.CheckBox generating an additional hidden input)
Die erste "ShowResolvedFailures" wäre der Wert, der generiert wird, weil das Kontrollkästchen aktiviert ist. Die zweite "ShowResolvedFailures" stammt aus der versteckten Eigenschaft, die wir erwarten
Aber wie entfernen wir diesen Parameter von unserer URL. Natürlich möchten wir den versteckten Parameter in unserer URL nicht sehen.
hier, um unseren Code:
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>
controller.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
});
}
Hallo Imad. Der Grund dafür, dass die versteckte Eingabe falsch ist, ist für mich klar. Siehe den Link, den ich zu meiner Frage hinzugefügt habe. Ich verstehe auch, warum beide an den Server gesendet werden. Aber meine Frage ist: Warum sind beide in der URL sichtbar. Ich denke, es liegt an der Tatsache, dass Index ein HttpGet ist. Aber wir können keinen Post von dieser Methode machen, weil es der Index ist ... Ich werde versuchen, Request.QueryString ["ShowResolvedFailures"]. Enthält ("True"), weil ich diese Lösung woanders gesehen habe. Aber wo soll ich diese Linie benutzen? –