Holen Sie sich Wert von ASP.NET MVC Lambda Expression

8

Ich versuche, meinen eigenen HTML-Helfer zu erstellen, der einen Ausdruck aufnimmt (ähnlich dem eingebauten LabelFor & lt; & gt; -Helfer. Ich habe Beispiele gefunden, um den Wert einer Eigenschaft zu erhalten, wenn der Ausdruck ähnlich ist:

%Vor%

In einigen meiner Modelle möchte ich jedoch Eigenschaften in untergeordneten Elementen abrufen, z. B.

%Vor%

In diesen Beispielen kann ich den Wert von Vorname nicht finden. Kann jemand beraten, wie ich diesen Wert bekommen sollte?

Danke

    
user460667 28.09.2010, 13:43
quelle

3 Antworten

14

Wenn Sie das gleiche Muster wie das LabelFor & lt; & gt; Methode verwendet, dann ist der Ausdruck immer ein LambdaExpression und Sie können es einfach ausführen, um den Wert zu erhalten.

%Vor%

Im Allgemeinen können Sie generische Ausdrücke immer in LambdaExpressions einschließen und dann & amp; Rufen Sie sie auf, um den Wert zu erhalten.

Wenn das, was Sie wollen, nicht der Wert von Vorname ist, sondern das Feld selbst (fx., um die Zeichenfolge "Vorname" auszudrucken), dann ist Ihre einzige Option, eine Form von ExpressionWalking zu verwenden. In C # 4 stellt das Framework eine Klasse namens ExpressionVisitor zur Verfügung, die dafür verwendet werden kann, aber für frühere Versionen des Frameworks müssen Sie es selbst implementieren - siehe: Ссылка

    
AHM 28.09.2010, 14:06
quelle
7

Sie suchen nach dem Wert?

Warum würde das nicht funktionieren?

%Vor%     
jfar 28.09.2010 14:05
quelle
4

Ich habe das getrennt beantwortet, weil es zwei Dinge gab, die mir an der angenommenen Antwort nicht gefielen.

  1. Es wird nicht erklärt, wie man beim Schreiben eines benutzerdefinierten HTML-Helfers
  2. einen Verweis auf das Modell erhält, das eine kritische Information darstellt
  3. Wenn Sie wissen, wie der Delegattyp für den Lambda-Ausdruck im Vordergrund steht, müssen Sie ihn nicht in den Lambda-Ausdruck umwandeln und DynamicInvoke verwenden. Nach meiner Erfahrung beim Schreiben von benutzerdefinierten Helfern weiß ich, dass ich die Typen kenne.

Beispiel, wo ich weiß, ist es für einen Lambda-Ausdruck entwickelt, der ein Byte-Array ergibt:

%Vor%     
Alan Macdonald 12.05.2015 11:03
quelle