2009-11-17 54 views
4

這裏是我當前視圖代碼:MVCContrib,Html.Grid:如何將基於行的id附加到td標籤?

<% Html.Grid((List<ColumnDefinition>)ViewData["Parameters"]) 
    .Columns(column => 
     { 
      column.For(c => c.ID); 
      column.For(c => c.Name); 
     }).Render(); 
%> 

我想一個HTML 「id」 屬性附加到每個 「名」 td標籤這樣:

<table class="grid"> 
    <thead> 
    <tr> 
     <th>Id</th> 
     <th>Name</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr class="gridrow"> 
     <td>1</td> 
     <td id="parameter_1">Address</td> 
    </tr> 
    <tr class="gridrow_alternate"> 
     <td>2</td> 
     <td id="parameter_2">Phone Number</td> 
    </tr> 
    </tbody> 
</table> 

我的問題:

我該怎麼做?

我認爲'屬性'擴展方法,但我不知道如何才能使它工作。

回答

1

也許渲染指定HTML的最好方法是完全放棄MVCContrib HTML.Grid,只是使用foreach呈現標記。

+1

吉姆,我實際上得到它的工作,檢查我編輯的答案。 – 2009-11-18 17:49:57

+0

@Josh Pearce:我仍然無法編譯你的答案。如果第三方有意見,這將是很好的。 – 2009-11-19 21:40:36

3
column.For(c => c.ID).Attributes(c=> new Dictionary<string, object>(){{"id", c.ID}}); 
+0

-1:你不能像這樣在lambda表達式之間共享參數。 – 2009-11-18 14:39:23

+0

編輯:我錯了,這裏是如何做一個ID屬性,我扔了一個類,只是爲了顯示如何做到這一點。對不起原來的壞信息。 – 2009-11-18 15:24:39

+0

@Josh Pearce:你不能在'Attributes()'中放置'c.ID',並期望它在'For()'中引用'c'。 – 2009-11-18 15:38:55

4

語法比較怪異,但它確實工作。喬希的回答是正確的。這是完整的答案,使用我當前項目中的一行。這包括使用多個屬性的語法:

col.For(ts => ts.Subtitle.Abbreviation) 
    .Named("Subtitle<br />Language") 
    .Attributes(x => new Dictionary<string, object>() 
    {           // { "name", "value" }; results in: 
     { "title", x.Item.Subtitle.Text }, // title="someLanguage" 
     { "class", "someCssClass" },   // class="someCssClass" 
     { "id", "someIdOrOther' }    // id="someIdOrOther" 
    }); 

可以根據需要包含儘可能多的名稱/值對。如果您需要使用該行對象中的數據,則每個對象都可以訪問lambda變量(x,在上例中)的.Item屬性。