我們正在MVC3中構建一個應用程序,我們希望擁有可編輯的數據表。我們所追求的是這樣的(略有刪節):一個<form>每個<tr>
<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>
當然,把一個<form>
直接在<table>
內是無效的HTML;它似乎在某些情況下工作,但在其他情況下,它完全嚇倒了瀏覽器和/或模型綁定器。
什麼是最安全,最乾淨的方式來做到這一點,以便我們不依賴未定義的行爲?我希望有適合有或沒有AJAX的表單。我玩弄<div>
和display: table-cell
技巧,但這阻止了使用colspan
,我們也需要這樣做。
你有沒有考慮過使用KendoUI可編輯網格? –
[創建一個HTML表格,其中每個TR是一個FORM](http://stackoverflow.com/q/4035966/743382)包含兩種方法可以結合使用:在整個表格周圍放置一個表單,使其無JS ,使用JS只在可能的情況下提交當前行。 – hvd
我試圖避免將整個表格封裝成一種形式,因爲我們最終不得不做特技來保持控件名稱的獨特性,並將它們解析回動作方法中(這可能會少一些優雅比將表單輸入直接綁定到操作方法參數,就像我們現在所做的那樣)。 – db2