Я бы порекомендовал вам использовать шаблоны редактора в вашем представлении вместо того, чтобы писать некоторые для циклов:
Например:
public ActionResult Save()
{
var model = Enumerable.Range(1, 3).Select(x => new Contact());
return View(model);
}
[HttpPost]
public ActionResult Save(List<Contact> contacts)
{
...
}
и в представлении (которое строго типизировано IEnumerable<Contact>
):
<div>
<% using (Html.BeginForm()) { %>
<%= Html.EditorForModel() %>
<input type="submit" value="OK" />
<% } %>
</div>
и внутри шаблона редактора контактов (~/View/Shared/EditorTemplates/Contact.ascx
):
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<Contact>"
%>
<%= Html.TextBoxFor(x => x.Id) %>
<%= Html.TextBoxFor(x => x.Address) %>
Шаблоны редактора обеспечат создание собственных имен для полей ввода.
Теперь все, что осталось, это AJAXify форму:
$('form').submit(function() {
$.ajax({
url: this.action,
type: this.method,
traditional: true,
data: $(this).serialize(),
success: function(result) {
...
}
});
return false;
});