Я использую вид с двумя частичными видами внутри.
<div id="matches">
<% foreach (var item in Model)
{ %>
<% Html.RenderPartial("RenderMatchesListRowUserControl", item); %>
<% } %>
</div>
<div id="addMatchFormBox">
<% Html.RenderPartial("AddNewMatchUserControl");%>
</div>
Первое частичное представление «RenderMatchesListRowUserControl» отображает простой элемент div (для списка совпадений), второе «AddNewMatchUserControl» отображает форму для создания нового совпадения под списком:
Источник AddNewMatchUserControl:
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
<% using (Ajax.BeginForm("Create", new AjaxOptions
{
UpdateTargetId = "matches",
InsertionMode = InsertionMode.InsertAfter,
OnSuccess = "flashit",
OnFailure = "renderForm"
}))
{%>
<fieldset>
<legend>New Match</legend>
<p>
<label for="DurationBetweenMovesInDays">
Dauer (in Tagen) zwischen den Zügen:</label>
<%= Html.TextBox("DurationBetweenMovesInDays")%>
<%= Html.ValidationMessage("DurationBetweenMovesInDays", "*")%>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
В зависимости от ModelState контроллер возвращает частичное представление для новой записи соответствия или частичное представление для формы, чтобы отобразить ошибки модели.
if (Request.IsAjaxRequest()) {
return ModelState.IsValid ? PartialView("RenderMatchesListRowUserControl", match) : PartialView("AddNewMatchUserControl");
}
Работает нормально, пока ModelState не станет недействительным. В этом случае форма будет отображаться в конце списка совпадений, поскольку updatetargetid ссылается на элемент div, который содержит список совпадений. Чтобы избежать этого, необходимо изменить updatetargetid для ссылки на элемент div, содержащий форму. Но я понятия не имею, как это сделать.