2つの部分ビューがあるビューを使用します。ModelStateが無効の場合、ASP.NET MVC AJAXはUpdateTargetIdを変更します。
<div id="matches">
<% foreach (var item in Model)
{ %>
<% Html.RenderPartial("RenderMatchesListRowUserControl", item); %>
<% } %>
</div>
<div id="addMatchFormBox">
<% Html.RenderPartial("AddNewMatchUserControl");%>
</div>
最初の部分図「RenderMatchesListRowUserControlは」(試合のリストについては)簡単なdiv要素をレンダリングし、二番目の「AddNewMatchUserControlは、」リストの下に新しいマッチを作成するフォームをレンダリング:
ソースAddNewMatchUserControlの:
にModelStateに応じ<%= 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>
<% } %>
、コントローラは、モデルエラーを表示するために、新しい一致エントリまたはフォームのための部分的なビューのための部分的なビューを返します。
if (Request.IsAjaxRequest()) {
return ModelState.IsValid ? PartialView("RenderMatchesListRowUserControl", match) : PartialView("AddNewMatchUserControl");
}
ModelStateが無効になるまでうまくいきます。この場合、フォームはupdatetargetidがマッチリストを含むdiv要素を参照するため、一致リストの最後に表示されます。これを避けるには、フォームを含むdiv要素を参照するようにupdatetargetidを変更する必要があります。しかし、私はこれを行う方法がわかりません。
問題をどのように解決したかを理解していただければ幸いです。 –