2015-05-15 45 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。[]作爲@ 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

我再次編輯。 –