我使用内部有两个局部视图的视图。
<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元素。但我不知道该怎么做。
答案 0 :(得分:0)
我有同样的问题。如果模型状态无效,我想更新包含表单的div中的内容,如果成功保存,则要更新数据集合。因此,我使用的技巧不是使用“ UpdateTargetId”。我使用“ OnSuccess”进行处理。
这里是一个例子。
@using (Ajax.BeginForm("SaveUser", new AjaxOptions{
HttpMethod = "Post",
LoadingElementId = "save-progress",
OnSuccess = "onUpdateSuccess"
InsertionMode = InsertionMode.Replace}))
这是一个JavaScript示例。
function onUpdateSuccess(response, xhr) {
$('#progress-bar').css({ 'display': 'none' });
if (response.indexOf('form') != -1) {
$('#addOrEditUserForm').html(response);
} else {
$('#user-table').html(response);
$('#addOrEditUserForm').html('')
}
};
答案 1 :(得分:-2)
还好。没有办法以这种方式实现这一目标。我用jQuery解决了它。