查看
@Html.DropDownListFor(model => model.PracticGropupId, new SelectList(Model.PracticeGroup, "Value", "Text"))
@Html.DropDownListFor(model => model.SubPracticeGroupId, Enumerable.Empty<SelectListItem>(), new { style = "width:250px;" })
JS
$('#PracticGropupId').change(function () {
var selectedGroupId = $(this).val();
$.getJSON('/Business/SubPracticeGroup', { practiceGroup: selectedGroupId }, function (subGroups) {
var subGroupsSelect = $('#SubPracticeGroupId');
subGroupsSelect.empty();
subGroupsSelect.append(
$('<option/>')
.attr('value', '')
.text('Subgroup')
);
$.each(subGroups, function (index, subGroup) {
subGroupsSelect.append(
$('<option/>')
.attr('value', subGroup.Code)
.text(subGroup.Name)
);
});
});
});
如果服务器端验证失败,则在提交时出现错误消息,并且SubPracticeGroupId下拉列表中的值变为空白。对于我使用jQuery ajax动态生成的HTML也会发生这种情况。有没有办法在服务器端验证后保留这些值?
答案 0 :(得分:1)
使用 Ajax.BeginForm 而不是 Html.BeginForm ,因为 Html.BeginForm 会执行完整的回发,您将无法保留它们,使用 Ajax.BeginForm ,数据将异步发布。
答案 1 :(得分:0)
这就是我做的。我更改了以下Html.Begin表单
@using (Html.BeginForm("ActionName", "ControllerNmae", FormMethod.Post, new { enctype = "multipart/form-data" }))
到
@using (Ajax.BeginForm("ActionName", "ControllerNmae", new AjaxOptions
{
InsertionMode = InsertionMode.InsertAfter,
HttpMethod = "POST",
OnFailure = "ShowFailureMessage",
OnSuccess="Success",
UpdateTargetId ="error",
}))
为了显示验证消息,我创建了一个局部视图,并将其绑定到与我的父视图相同的ViewModel。 _error.cshtml
@model Project.ViewModels.VieModelName
<div class="error" >
@Html.ValidationSummary(false)
</div>
在父视图中添加了div以显示验证消息。该div的Id与ajax参数Parentview.cshtml中定义的相同
<div class="error" id="error" >
@Html.ValidationSummary(false)
@Html.Partial("_error")
</div>
最后在控制器中:
if (ModelState.IsValid)
{
.. Save logic
}
else
{
return PartialView("_error", VieModelName);
}