1

我们正在 MVC3 中构建一个应用程序,并且我们希望拥有可编辑的数据表。我们所追求的是这样的(略有删节):

<table class="project-items data-grid">
    foreach (var item in Model.Items) {
        using (Html.BeginForm("SaveItem", "Project", FormMethod.Post)) {
            <tr>
                <td>@Html.TextBox("Title", item.Title) @Html.Hidden("ProjectID", proj.ProjectID) @Html.Hidden("ItemID", item.ItemID)</td>
                <td>@Html.DropDownList("State", item.State.ToSelectList(), "")</td>
                <td>@Html.DropDownList("QuoteID", Model.Quotes.ToSelectList(item.QuoteID), "")</td>
                <td>@Html.TextBox("EstimatedCost", item.EstimatedCost, new { @class = "costfield" })</td>
                <td>@Html.TextBox("VendorEstimatedCost", item.VendorEstimatedCost, new { @class = "costfield" })</td>
                <td>@Html.TextBox("VendorQuotedCost", item.VendorQuotedCost, new { @class = "costfield" })</td>
                <td><input type="submit" value="Save" name="Save"/></td>
            </tr>
        }
    }
</table>

当然,将 a<form>直接放入 a<table>不是有效的 HTML;它似乎在某些情况下有效,但在其他情况下,它完全吓坏了浏览器和/或模型绑定器。

什么是最安全、最干净的方法来做到这一点,这样我们就不会依赖未定义的行为?我想要一些适合有或没有 AJAX 的表单的东西。我玩弄了 using<div>display: table-cell技巧,但这阻止了使用colspan,我们也需要这样做。

4

2 回答 2

1

如果您的应用程序只打算在现代浏览器中运行,您可以使用 HTML5form属性form即使控件不在formHTML 标记中的元素内,它也可以让您将控件与元素相关联。因此,您可以例如form在包含提交按钮的单元格内使用标记,并form在其他控件中使用,这些控件在功能上属于同一表单的一部分。

于 2013-08-26T17:01:10.703 回答
0

好吧,我一直在玩它,似乎将 a 包裹<tr>在 a<form>中确实会产生预期的表单提交行为,即使它不是严格的 Kosher HTML,至少对于我测试的浏览器样本相对狭窄。我怀疑将其与 Jukkaform对控件属性的使用相结合,可以为任何将 DOM 破坏到无法正常工作的浏览器提供一些帮助。

我认为现在就可以了;它只是一个内部使用的应用程序,所有其他替代方案都需要愚蠢的 Javascript 特技,甚至更愚蠢的 CSS 特技,或者损害整体用户体验。

也许如果我们都开始这样做,W3C 和浏览器制造商会决定应该完全支持它。;)

于 2013-08-30T18:25:42.700 回答