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, IDictionary> Attributes 它只是让我觉得很愚蠢! @Josh Pearce:如果您将代码稍微更改为此 - column.For(c => c.ID).Attributes(c=> new Dictionary( )"id", c.Item.ID);正如其他 cmets 所说,由于范围的原因,您不会通过以前使用的 lambda 变量直接访问。但是您引用的签名确实使您可以通过 Item 属性访问数据本身。至少对于最新版本的 MVCContrib 网格来说是这样。【参考方案3】:

也许呈现指定 HTML 的最佳方式是完全放弃 MVCContrib HTML.Grid,而只使用 foreach 呈现标记。

【讨论】:

@Josh Pearce:我仍然无法编译您的答案。如果第三方有意见就好了。

以上是关于MVCContrib,Html.Grid:如何将基于行的 id 附加到 td 标签?的主要内容,如果未能解决你的问题,请参考以下文章

MVCContrib 网格 - 选择行

如何将 css 类添加到 MVCContrib 网格 <th>

可以将页脚添加到 MVCContrib 网格吗?

扩展 HTML Grid 以在 Html Grid 末尾添加 div (MVC Contrib)

Html.Grid 右对齐列中的数据

如何将 css 类应用于 mvccontrib 网格