【问题标题】:MVCContrib, Html.Grid: How can I attach a row-based id to a td tag?MVCContrib,Html.Grid:如何将基于行的 id 附加到 td 标签?
【发布时间】: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>

我的问题:

我该怎么做?

我考虑过“属性”扩展方法,但不确定如何使其发挥作用。

【问题讨论】:

    标签: asp.net-mvc attributes grid mvccontrib


    【解决方案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:我仍然无法编译您的答案。如果第三方有意见就好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多