2017-02-10 4 views
1

Я большой нуб в порядке, поэтому, пожалуйста, голые со мной ...Получить свойство по имени динамического ключа?

В принципе, я пытаюсь избежать дублирования некоторых шаблонов, скажем, у меня есть следующий (очень упрощенно) шаблон:

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

У меня также есть кнопка Правый шаблон, так что мой вопрос в том, есть ли способ, которым я могу пройти в «Стороне» кнопки и получить доступ к свойству? Я знаю, что в javascript я бы сделал что-то вроде:

@(button?.button"+side+".Url), но, очевидно, мы не используем javascript.

Я попытался создать вспомогательную функцию

@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") 

Я надеюсь, что это было достаточно ясно!

EDIT: Ive сделал следующую функцию, однако на некоторых он не на var b линии со следующей ошибкой:

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

Итак, вы хотите представить значение свойства кнопки на странице? И вы хотите получить доступ к этому свойству с помощью имени строки? – kat1330

+0

Способ, которым вы хотите получить доступ к свойству, не поддерживается. Что вы можете сделать, это проверить значение 'side' в условии if и использовать соответствующее свойство кнопки на основе значения. –

ответ

1

C# набрана и не предоставляет функциональные возможности как JavaScript. Во всяком случае, вы можете попробовать что-то вроде в follwoing пример динамически прочитать значение свойства по имени:

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

UPDATE:

Хорошо, я думаю, что вы будете нуждаться в какой-то метод расширения, но попробуйте первым это:

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

Это стало запутанным :) Я не люблю этот вид пользовательского интерфейса, но пусть пытаются объяснить:

Елки тип buttonRight собственности я получить. Затем я извлекаю тип Url и поставляется с экземпляром buttonRight.

Она должна быть разбита на следующие строки:

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

Теперь url это значение, которое вы ищете. Посмотрите на скрипке, как это работает:

.NET Fiddle.

+0

Спасибо за это. Это похоже на то, что я пробовал, я полностью пропустил часть своего кода, как бы получить доступ к кнопке? .buttonLeft? .Text', где Left все еще является динамической частью ключа, но Text постоянная? –

+0

Я обновил свой вопрос –

+0

Спасибо за это, последнее! Я отредактировал мой OP снова с моей последней проблемой. –

Смежные вопросы