Frage ASP.Net MVC3-Modellbindungsfehler


Ich habe ein seltsames Szenario gefunden, das einen Bool verhindert? wird korrekt auf den Controller zurückgeschickt. Es ist ein sehr spezifisches Problem, also folgen Sie den Schritten, um neu zu erstellen.

Die Anwendung muss als virtueller Ordner in IIS bereitgestellt werden, sodass anstelle von / Home / Test die URL / Virtual / Home / Test lautet.

Heim-Controller:

[HttpGet]
public ActionResult Test(int? temp, bool? testBool)
{
    return View(testBool);
}

/ Home / Testansicht (Razor cshtml):

@model bool?
@{
    ViewBag.Title = "Test";
}

@using (Html.BeginForm("Test", "Home", FormMethod.Get))
{
    @Html.CheckBox("testBool", Model ?? false, new { onchange = "this.form.submit();" })
    @Html.Label(Model == true ? "True" : "False")
}

Auf Post zurück die bool? kommt es wegen des Int nicht zum Controller? davor in der Parameterliste. Dies kann gelöst werden, indem man den bool setzt? vor dem Int? in der Parameterliste sollte das aber offensichtlich nicht nötig sein. Es funktioniert auch gut, wenn nicht in einem virtuellen Ordner auf IIS. Das gleiche Problem gibt es, wenn Sie auch eine POST-Methode verwenden, obwohl Sie einen Bool anstatt einen Bool posten? funktioniert, ist aber nicht notwendig, wenn nicht auf einem virtuellen Ordner, so sollte dies auch nicht tun.

Hat jemand anderes dies erfahren und gibt es irgendetwas, das erklärt, warum das Binden fehlschlägt, oder ist es nur ein Fehler in MVC3?

Wenn es nur ein Fehler ist, weiß jemand, was sind die richtigen ASP.Net MVC-Kanäle für das Einreichen von Fehlerberichten?

Aktualisieren:

Ich habe festgestellt, dass, wenn Sie eine Anzahl von nullbaren Variablen in den Aktionsparametern haben, nur die erste funktioniert und alle anderen nicht gefüllt werden. Wer weiß, ob dies ein Design oder ein Fehler ist?


7
2018-04-21 11:11


Ursprung


Antworten:


Anscheinend ist das immer noch ein Problem. Ich dachte, es wäre jetzt behoben worden. Ein Weg um diesen speziellen Fehler ist es, dies zu Ihrem hinzufügen Application_Start Methode.

ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

Wenn Sie das hinzufügen, können sich nullwertfähige Parameter entsprechend verhalten. Ich bin überrascht, dass dieser Fehler noch existiert, wie es im Dezember von RC2 bekannt war.

Der Unterschied zwischen den optionalen route-Parametern in dem Artikel von hacked ist, dass in Ihrem Beispiel Routing nicht das Problem ist. In diesem Fall posten Sie (oder Querystring) Daten und füllen Ihre Nullwert-Aktionsparameter nicht richtig auf. Ich habe die mvc3-Quelle überprüft und sehe nicht, warum dies ein Problem sein sollte, da es zu debuggen scheint, es richtig zu funktionieren und das Durchlaufen der Quelle führt zu dem erwarteten Verhalten. Ich bin ziemlich sicher, dass dies nicht behoben wurde, obwohl Scott Guthrie sagte, dass es jetzt sein sollte ...


1
2018-05-05 02:59



Dies Artikel kann für Sie von Nutzen sein.


3
2018-04-21 13:35