Frage

Zu allererst einige Kontext :

Ich habe ein Formular, wo ich einige Objekte Post zurück, die in Objekte von MVCs Einbau-Modelbinder automatisch verwirklicht werden:

<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);

Außerdem: ich betonen möchte, dass wir Entsendung sind DTO (DataTransferObjects), dass wir weiter auf der ganzen Linie Karte in Entitäten Entity Framework, so dass wir lieber nicht, wie die Änderung nichts auf dem DTO außer vielleicht Hinzufügen von Attributen

Problem

Wenn ein Benutzer einen ungültigen Wert für „Stunden“ betritt, sagen: ‚Fubar‘, dann ist der Modelbinder wird natürlich nicht versuchen, die ‚hours'-Eigenschaft festzulegen. Aber es standardmäßig auf 0, weil es ein int und nicht string .

Dies bewirkt, dass für mich einige Mühe, natürlich, denn jetzt kann ich nicht sehen, ob der Benutzer tatsächlich 0 eingegeben, oder wenn dies durch ungültige Eingabe verursacht wurde.

Da ich ein Haus gewalzte bin mit Objekt-to-Entität (Entity Framework) Mapper, wir können nicht die Fußspur der ‚hours'-Eigenschaft auf int ändern? . Ich bin mir bewusst, dass MVC hat einige in Validation gebaut, aber wir würden lieber nicht umsetzen, da wir wissen, dass es wild angegriffen wurde und dass es einige neue Validierung in ASP.NET MVC 2.0 kommen.

Lösung?

Ich muß in der Lage sein, um den Benutzer darauf hinzuweisen, das Feld nicht richtig ist, so dass Mittel ich eine Ausnahme irgendwie muß in die Lage zu fangen (oder möglicherweise eine andere geniale Lösung?), Wo ich eine gewisse Logik tun und Post zurück eine neue Ansicht für den Benutzer, wo ich klarstellen, was sie taten, falsch.

Meine aktuelle Idee. Das Schreiben einer benutzerdefinierten Modelbinder

Was schlagen Sie vor?

War es hilfreich?

Lösung

  

Dies bewirkt, dass für mich einige Mühe, natürlich, denn jetzt kann ich nicht sehen, ob der Benutzer tatsächlich 0 eingegeben, oder wenn dies durch ungültige Eingabe verursacht wurde.

Ja, Sie können. Schauen Sie in die Model.

Andere Tipps

Dies ist zwar nicht besonders ideal ist, haben Sie gesagt, dass Sie ändern nichts wollen nicht anders. So ist die Option, die Sie erwähnten, wird einen benutzerdefinierten Modelbinder zu schaffen funktionieren. Allerdings finden Sie vielleicht selbst eine Modelbinder für jede Einheit zu schaffen, die Sie binden möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top