MVCContrib,Html.Grid:如何将基于行的 id 附加到 td 标签?
Posted
技术标签:
【中文标题】MVCContrib,Html.Grid:如何将基于行的 id 附加到 td 标签?【英文标题】:MVCContrib, Html.Grid: How can I attach a row-based id to a td tag? 【发布时间】:2010-12-17 15:39:12 【问题描述】:这是我当前的视图代码:
<% html.Grid((List<ColumnDefinition>)ViewData["Parameters"])
.Columns(column =>
column.For(c => c.ID);
column.For(c => c.Name);
).Render();
%>
我想为每个“name”td 标签附加一个 HTML“id”属性:
<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】:语法很奇怪,但它确实有效。乔希的答案是正确的。这是完整的答案,使用我当前项目中的一行。这包括使用多个属性的语法:
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
属性。
【讨论】:
【参考方案2】:column.For(c => c.ID).Attributes(c=> new Dictionary<string, object>()"id", c.ID);
【讨论】:
-1:你不能像那样在 lambda 表达式之间共享参数。 已编辑:我错了,这里是如何做一个 ID 属性,我扔了一个类只是为了展示如何做。很抱歉最初的错误信息。 @Josh Pearce:您不能将 'c.ID' 放在 'Attributes()' 中并期望它在 'For()' 中引用 'c'。 好吧,这成了个人恩怨。我相信上述答案最终会奏效。我开始认为 C# 已经从一种公共语言变成了语言设计者之间的一系列私人情书。我的意思是,这里是这个方法的方法签名: public Func也许呈现指定 HTML 的最佳方式是完全放弃 MVCContrib HTML.Grid,而只使用 foreach 呈现标记。
【讨论】:
@Josh Pearce:我仍然无法编译您的答案。如果第三方有意见就好了。以上是关于MVCContrib,Html.Grid:如何将基于行的 id 附加到 td 标签?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 css 类添加到 MVCContrib 网格 <th>