2009-11-17 76 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属性。