【问题标题】:In MVC whats best practice for placing primary key in table row在 MVC 中,将主键放在表行中的最佳做法是什么
【发布时间】:2014-10-31 15:17:23
【问题描述】:

我的问题是,在表行上放置主键并使用 Jquery 查找 ID 时,最佳做法是什么。

因此,使用 MVC,您可以使用编辑和删除按钮创建数据表,单击该按钮将打开模型弹出窗口。

你应该:

a) 在每个按钮的数据属性中放置主键

b) 每行都有隐藏字段

c) 在每个按钮上使用 Onclick 并将 ID 传递给函数

d) 在 tr 标签上有 ID

【问题讨论】:

  • 从不使用 ID。如果它只是供 jQuery 使用,我倾向于在每一行使用一次data-id=""
  • 我想任何可以访问该 ID 的地方都可以使用。隐藏字段很常见,因为它也会自动发布表单。数据属性对于 JavaScript 工作也是明智的。 (请注意,两者并不相互排斥。)这实际上与 MVC 模式没有任何关系,它只是将数据元素放入 HTML 表中。
  • 这真的取决于情况。例如,在某些情况下我有 name="object[id]" 而在其他情况下我使用隐藏字段。这真的取决于你正在构建 IMO。

标签: jquery model-view-controller


【解决方案1】:
  • a) 如果不需要,请勿重复属性(这会使页面膨胀)
  • b) 隐藏字段仅在您需要回发值时才有效
  • c) 切勿将onclick 处理程序与jQuery 一起使用(它将处理程序与代码无缘无故地分开,并且只支持单个处理程序)
  • d) 切勿将 ID 用于数据属性(因为 ID 在页面上必须是唯一的,因此发生冲突的可能性太大)

所以我倾向于选择e):

  • e) 如果它只是供 jQuery 使用,我倾向于在每一行使用一次 data-id=""

然后从行中的任何元素我使用.closest('tr').data("id") 等来获取PK。 (实际上我经常使用这种模式,我有一个自定义的 jQuery 扩展来做到这一点。例如:.closestAttr("data-id"))。

.closestAttr():

为感兴趣的人提供 TypeScript 代码:

// Find the nearest matching attribute in the elements themselves, as well as in all ancestors
jQuery.fn.closestAttr = function (attribute: string): string
{
    return this.closest('[' + attribute + ']').attr(attribute);
};

或者在普通的 JS 中:

// Find the nearest matching attribute in the elements themselves, as well as in all ancestors
jQuery.fn.closestAttr = function (attribute)
{
    return this.closest('[' + attribute + ']').attr(attribute);
};

附加说明:如果数据在父级下分组,那么我在表格上还有另一个 data-id="" 代表父级 FK/组等。

更新 - 对于评论中提供的代码示例:

我会这样做:

@foreach (var i in n) 
{ 
    <tr data-id="@i">
        <td>@i</td>
        <td><input type="button" class="edit" value="Edit" /></td> 
        <td><input type="button" class="delete" value="Delete" /></td> 
    </tr> 
}

并通过按下按钮的.closest('tr').data("id") 获取 id。

【讨论】:

  • 您好 TrueBlueAussie,如果行有两个按钮,您会将 data-id 放在哪里? tr?
  • 示例:@foreach (var i in n) { @i }
  • @Chris:只需使用@foreach (var i in n) { &lt;tr data-id="@i"&gt; 和上面显示的closest 代码来获取PK/id)。
  • 谢谢这是我想要的。
【解决方案2】:

如果您在真正的代码优先的情况下工作,最好有一个专门用于主键的唯一列。我假设在您的问题中,您将列与 Jquery 中的按钮等同起来。这样效果最好。

当然,如果您使用的是预先存在的表,则必须使用该表中的键。有时它们是使用多于一列的复杂键;我什至见过一张表,其中所有列都用于形成一个键(但恕我直言,这是非常糟糕的设计)。

如果您负责数据库设计,在我看来,为主键保留一列总是值得的,尤其是在您使用 SQL 服务器时。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签