Хорошо, спасибо вам всем, что я сделал, чтобы решить.
сначала я создал новое частичное представление _ClientRow.cshtml:
@using Extensions.CollectionItemsHtmlExtension
@using ClientViewModel
@model ClientViewModel
<div class = "clientEditRow">
@using(Html.BeginCollectionItem("Clients"))
{
@First Name: @Html.TextBoxFor(c=>c.FirstName)
@Last Name: @Html.TextBoxFor(c=>c.LastName)
}
</div>
Это частичное представление отображает новоелиния для клиента.BeginCollectionItem - это расширение HTML, загружаемое после сообщения в блоге, о котором упоминал Дарин.
Затем, на мой взгляд, я установил:
<legend>Clients</legend>
<fieldset>
<div id="clientEditorRows">
@foreach(var client in Model.Clients)
{
Html.RenderPartial("_ClientRow", client);
}
</div>
@Html.ActionLink("New Client", "NewClientRow", null, new {id = "addItem"})
</fieldset>
...
<script type="text/javascript" scr="../Scripts/listEditor.js"></script>
foreach проходит по всем клиентам и отображает частичное представление для каждого клиента.,Затем в моем контроллере я написал этот метод:
public PartialViewResult NewClientRow()
{
return PartialView("_ClientRow", new ClientViewModel())
}
Этот метод вызывается ActionLink и возвращает html для новой строки, добавляя его к предыдущим строкам.В конце концов я добавил этот код файла javascript из сообщения блога и изменил его в моем случае:
listEditor.js
$("#addItem").click(function () {
$.ajax({
url: this.href,
cache: false,
success: function (html) { $("#clientEditorRows").append(html); }
});
return false;
});
Этот код js добавляет HTML-код для новой строки на страницу.Надеюсь, что это поможет, еще раз спасибо всем.
alex
PS: метод HttpPost, получающий значения, не был изменен и имеет эту подпись
[HttpPost]
public ActionResult Create(ResturantViewModel resturantVM)
{
...
}
дляобратите внимание, что resturantVM.Clients получает все значения, нет необходимости добавлять параметр IList Clients