Frage

Ich habe zwei Editorvorlagen: eine für Dezimal- und eine für Dezimalzahlen?(neigtbar)

Wenn ich jedoch in meinem Modell eine nullbare Dezimalstelle habe, versucht es, den normalen Dezimaleditor zu laden:

generasacodicetagpre.

Der erste funktioniert gut und lädt die Dezimal-Editor-Vorlage.Der zweite versucht auch, die Dezimalvorlage zu laden (und fehlschlägt, weil es kein Dezimalfeld ist).

Die Fehlermeldung lautet:

generasacodicetagpre.

Meine Vorlagen werden so deklariert:

Dezimalvorlage:

generasacodicetagpre.

nullable Dezimalvorlage:

generasacodicetagpre.

Ich weiß, dass ich es funktionieren kann, indem ich den Vorlagennamen weitergeben kann, zB

Aber ich würde es wirklich bevorzugen, einfach automatisch zu arbeiten, indem er den Typ genauso wie alle anderen Vorlagen verwendet.

generasacodicetagpre.

War es hilfreich?

Lösung

Danke an Bryan, um eine Prämie hinzuzufügen, um zu versuchen, eine positive Lösung zu erhalten, aber ich muss antworten und sagen, dass ich festgestellt habe, dass die Antwort definitiv nein ist - Sie können keine nullfähige Vorlage automatisch entdeckt haben seine Art. Sie müssen einen Vorlagennamen verwenden.

Dies ist das relevante Zitat aus Brad Wilsons Blog von http://badwilson.typad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html . Er ist eine autorisierende Quelle für MVC, also muss ich ihm glauben, wenn er sagt:

Wenn Sie nach dem Typennamen suchen, ist das Einfacher Name wird verwendet (d. H. Typ.Name) ohne Namespace. Auch wenn der Typ ist nullable, wir suchen nach t (so Sie bekommen die boolesche Vorlage Egal, ob Sie "bool" oder verwenden "Nullable")

er sagt auch zu sagen

Das heißt, wenn Sie Vorlagen schreiben Für Werttypen müssen Sie Konto, ob der Wert ist nullabel oder nicht. Du kannst den ... benutzen Isnullablevaluetype-Eigentum von Modelmetadata, um festzustellen, ob das Wert ist nullabel. Wir werden ein sehen Beispiel dafür unten mit dem Eingebaute boolesche Vorlage.

Ja, also gibt es eine Antwort auf diese Frage, aber leider ist die Antwort nein.

Um eine nullbare Vorlage zu verwenden, müssen Sie den Vorlagennamen erklären:

generasacodicetagpre.

oder Sie können eine Vorlage verwenden, die sowohl den nullable als auch den nicht nutzbaren Typ handelt:

generasacodicetagpre.

Andere Tipps

Um eine Vorlage für einen nullablierbaren Typ zu erstellen, nennen Sie Ihre Vorlage als Basiswert-Typ und erstellen Sie dann Ihre Editor-Vorlage mit einem nullfähigen Modell.

Zum Beispiel möchte ich eine Vorlage für Int machen?Ich habe eine Editorvorlage mit dem Namen "INT32.CSHTML" erstellt und ich benutze int?als Modell.

Die Vorlage müsste "nullable `1" genannt werden.Da dies eine beliebige nullable-Struktur entsprechen würde, können Sie einen Schalter des Modelltyps durchführen und die entsprechende Teilschablone basierend auf dem Typ von "nullable `1.cX"

rendern.

Es gibt keine Möglichkeit, es in der gewünschten Art zu tun.Es kann nur eine Vorlage für Dezimal- und Dezimalstellen geben?Sie können jedoch in der Vorlage bestimmen, wenn der eingelegte Wert von einem anspruchsvollen Typ wie diesem ist:

generasacodicetagpre.

Weitere Informationen überprüfen Dieser Blog-Beitrag

Ja, Sie können dies tun, ohne die Vorlage in HTML.EditorFOR anzugeben, dann müssen Sie jedoch die Vorlage mit dem UIHint-Attribut gegen nullable Eigenschaft angeben.

generasacodicetagpre.

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