2017-02-10 2 views
1

Ich bin ein großer Noob in Ordnung, so entblößen bitte mit mir ...Holen Sie die Eigenschaft nach dynamischem Schlüsselnamen?

Grundsätzlich bin ich ein paar Vorlagen kopieren, lassen Sie uns sagen, dass ich die folgende (sehr vereinfacht) Vorlage haben zu vermeiden versuchen:

<div class="same-template"> 
    @(button?.buttonLeft.Url) 
</div> 
<div class="same-template"> 
    @(button?.buttonRight.Url) 
</div> 

Ich habe auch eine Schaltfläche Right Vorlage auch, also meine Frage ist, gibt es eine Möglichkeit, ich kann in der "Seite" der Schaltfläche übergeben, und Zugriff auf die Eigenschaft? Ich weiß in Javascript würde ich etwas tun wie:

@(button?.button"+side+".Url) aber offensichtlich sind wir nicht mit Javascript.

Ich habe versucht, eine Hilfsfunktion

@helper GetFooter(Object button, String side) { 
    <div class="same-template"> 
     <!-- don't know what to do here... --> 
     @(button?.button<side>.Url) 
    </div> 
} 

@GetFooter(button, "Right") 

Ich hoffe, das war klar genug zu schaffen!

EDIT: Ive hat die folgende Funktion jedoch auf einige scheitert es an der var b Linie mit dem folgenden Fehler:

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

@functions{ 

    public dynamic GetNestedDynamicValue(IContentCardItem cardItem, String first, String second) { 
     var b = cardItem?.GetType().GetProperty(first).GetValue(cardItem, null); 
     var c = b?.GetType().GetProperty(second).GetValue(b, null); 
     return c; 
    } 
} 
+0

Also, Sie möchten Wert der Schaltfläche Eigenschaft in Seite präsentieren? Und Sie möchten auf diese Eigenschaft nach Zeichenfolgenname zugreifen? – kat1330

+0

Die Art, auf die Sie auf die Eigenschaft zugreifen möchten, wird nicht unterstützt. Sie können den Wert von "Seite" in der if-Klausel überprüfen und die entsprechende Eigenschaft der Schaltfläche basierend auf dem Wert verwenden. –

Antwort

1

C# eingegeben wird und bietet keine Funktionen wie JavaScript. Wie auch immer, Sie können beispielsweise so etwas wie versuchen in follwoing zu dinamically Wert der Eigenschaft mit Namen lesen:

<div> 
    @(button?.GetType().GetProperty("PropertyNameWhichYouNeed").GetValue(button, null)) 
</div> 

UPDATE:

Ok, ich denke, dass Sie einige Erweiterungsmethode benötigen, sondern zuerst versuchen, diese:

button?.GetType().GetProperty("buttonRight").GetValue(button, null) 
    .GetType().GetProperty("Url").GetValue(
button?.GetType().GetProperty("buttonRight").GetValue(button, null), 
null); 

Es wurde verwirrend :) ich mag diese Art von UI nicht, aber lassen Sie versuchen zu erklären:

Firs I abrufen Art von buttonRight Eigenschaft. Dann erhalte ich den Typ Url und den gelieferten Typ der Instanz.

Es sollte in folgenden Zeilen aufgeteilt werden:

var buttonRight = button.GetType().GetProperty("buttonRight").GetValue(button, null); 
var url = buttonRight.GetType().GetProperty("Url").GetValue(buttonRight, null); 

Jetzt url Wert ist, die Sie suchen. Bitte sehen Sie auf der Geige wie es funktioniert:

.NET Fiddle.

+0

Danke dafür, Das ist ähnlich wie das, was ich versucht habe, ich habe einen Teil meines Codes komplett weggelassen, wie würde ich auf 'button? .buttonLeft? .Text' zugreifen, wobei Left immer noch der dynamische Teil des Schlüssels ist, aber Text ist die Konstante? –

+0

Ich habe meine Frage aktualisiert –

+0

Danke dafür, eine letzte Sache! Ich habe meine OP wieder mit meinem letzten Problem bearbeitet –

Verwandte Themen