所以我问a question last year有一个“添加项目”按钮,它会在JavaScript中的一个表单中生成一个新行,我可以返回到MVC POST动作处理程序。“添加项目”绑定到集合的表单的JavaScript按钮 - MVC3中的情况会更好吗?
举例来说,如果我有产生这样一种形式:
@for(int i = Model.Notes.Count - 1; i >= 0; i--)
{
<tr>
<td>@Html.HiddenFor(m => m.Notes[i].Id, new Dictionary<string, object> { { "data-index", i } })
@Html.TextBoxFor(m => m.Notes[i].Timestamp, new { @class = "datepicker" })</td>
<td>@Html.DropDownListFor(m => m.Notes[i].PersonId, new SelectList(Model.People, "Id", "Name"))</td>
<td>@Html.EditorFor(m => m.Notes[i].Amount)</td>
<td>@Html.EditorFor(m => m.Notes[i].Comment)</td>
</tr>
}
它生成一个单行的HTML:
<tr>
<td><input data-index="2" data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Notes_2__Id" name="Notes[2].Id" type="hidden" value="16192">
<input class="datepicker hasDatepicker valid" data-val="true" data-val-required="The Timestamp field is required." id="Notes_2__Timestamp" name="Notes[2].Timestamp" type="text" value="11/04/2011 2:11:21 PM"></td>
<td><select id="Notes_2__PersonId" name="Notes[2].PersonId">
<option value="8367">Rei</option>
<option value="8668">Ray</option>
<option value="8883">Roy</option>
<option value="8814">Rob</option>
<option value="8886">Ron</option>
</select></td>
<td><input class="text-box single-line" data-val="true" data-val-number="The field Amount must be a number." data-val-required="The Amount field is required." id="Notes_2__Amount" name="Notes[2].Amount" type="text" value="0.00"></td>
<td><input class="text-box single-line" id="Notes_2__Comment" name="Notes[2].Comment" type="text" value="Some comment"></td>
</tr>
如果我想在MVC2添加一个项目,我必须编写一些非常干燥的JavaScript代码来确定最新项目的索引,生成所有tr
s,td
s和input
HTML,并设置要匹配的属性。
这不仅是非常重要的,如果我改变cshtml中的某些东西,我必须非常小心地确保所有的JavaScript匹配。这是一个非常糟糕的代码重复。
在MVC3中有更好的方法吗?
由于提前,
川
你有没有得到这与MVC3的工作? – 2012-09-22 17:28:54
@CiaranBruen对不起,我愿意回答,但2010-2011对我来说有点模糊,因为我幸免于一场房屋火灾,我的记忆一直很差。 – 2012-09-26 19:23:05
不用担心,听起来很粗糙希望你没事:) – 2012-09-28 08:01:57