2015-05-15 3 views
0
string[] showProperties = {"id", "name"}; 
@* 
user has many properties, id, name, address, etc... 
*@ 

<!-- now I just want to show the properties in the shownProperties list --> 
@for (int j = 0; j < showProperties.Length; j++) 
{ 
    <td> 
     @user.showProperties[j] 
    </td> 
} 

Обычно я хотел бы сделать @user.id или @ user.name для отображения, но в этом случае, [свойство] динамически тянули значением массива showColumns.Как получить переменную в другое выражение бритвы

Недопустимый параметр @ user.showProperties [j] не работает, Razor не будет распознавать id как свойство, например. Есть ли способ ввести «id» в @user. [] As @ user.id?

Как сделать @user.(mydynamicproperty) правильно?

ответ

0

Если ваш динамический объект имеет тип ExpandoObject, то его так же просто, как отличить динамический объект к типу IDictionary<string, object>, потому что этот интерфейс реализует ExpandoObject. Вот пример программы бритвой:

@{ 

    string[] showColumns = new string[3] {"Property1", "Property2", "Property3"}; 
    dynamic myobject = new System.Dynamic.ExpandoObject(); 
    myobject.Property1 = "First Property!"; 
    myobject.Property2 = "Second Property!"; 
    myobject.Property3 = "Third Property!"; 

    for (int i = 0; i < showColumns.Length; i++) 
    { 
     var propertyValues = (IDictionary<string, object>)myobject; 
     <p>@propertyValues[showColumns[i]]</p> 
    } 
} 

Если объект не является ExpandoObject, то это может быть немного сложнее. Трудно, но не невозможно. Посмотрите на ответ here.

+0

мой объект не ExpandoObject, ссылка не является относительно полезной. Надеюсь, я отредактировал свой вопрос. Можете ли вы взглянуть и посмотреть, сможете ли вы попробовать еще раз? Спасибо –

+0

@ChrisLists - Я все еще не уверен, что вы пытаетесь сделать? В вашем примере, что такое 'showProperties'? Покажите свое определение для этой переменной. – Icemanind

+0

Я снова отредактировал. –

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