Как отобразить partialview на том же div вместе с ошибкой msg, когда modelsate недействителен
Я новичок в MVC, пожалуйста, помогите по нижеприведенному вопросу.
Я создал частичное представление, которое имеет несколько обязательных элементов управления полем.
На странице индекса я показываю список сотрудников, а также визуализирую частичное представление внутри элемента управления div.
Но когда я говорю "отправить на частичное представление", не вводя никакого значения, очевидно, что
ModelState.IsValid
будет false из-за обязательного поля, но я не смог показать ту же индексную страницу с сообщением об ошибке проверки. Вместо этого он открывает новую вкладку и показывает страницу частичного просмотра вместе с сообщением об ошибке проверки.
Как показать одну и ту же страницу индекса вместе с сообщениями об ошибках проверки без использования новой вкладки.
Класс Сотрудников:
public int EmployeeID { get; set; } [Display(Name="Name")] [Required(ErrorMessage="Please enter employee name.")] public string EmployeeName { get; set; } [Range(20, 60)] public int Age { get; set; } public int Gender { get; set; }
частичное представление:
@using (Html.BeginForm("Save", "Employee", FormMethod.Post, new { id = "displayer" })) { @Html.ValidationSummary(true) @Html.HiddenFor(model => model.EmployeeID) <div class="form-group"> @Html.LabelFor(model => model.EmployeeName, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.EmployeeName) @Html.ValidationMessageFor(model => model.EmployeeName) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Age, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Age) @Html.ValidationMessageFor(model => model.Age) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Gender, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Gender) @Html.ValidationMessageFor(model => model.Gender) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Save" class="btn btn-default" /> </div> </div> }
действие контроллера:
[HttpPost] public PartialViewResult Save(Employee employee) { if (ModelState.IsValid) { return PartialView("Index", _employees); } ModelState.AddModelError("AddEmployee", "Please enter all mandatory fields."); return PartialView("_onPageEdit", new Employee()); }
страница индекса:
<a id="loadview">Load</a>
<div id="displayer" style="height:100px; width:400px;"> </div>
$('#loadview').click(function () { $.ajax({ type: 'POST', url: '@Url.Content("~/Employee/Loads")', success: function (data) { $('#displayer').html(data) }, error: function (data) { alert('Failed'); } }); })
Что я уже пробовал:
Я попытался загрузить div с помощью Ajax, но не смог добиться того же после проверки.
$('#loadview').click(function () { $.ajax({ type: 'POST', url: '@Url.Content("~/Employee/Loads")', success: function (data) { $('#displayer').html(data) }, error: function (data) { alert('Failed'); } }); })
F-ES Sitecore
Трудно понять, что происходит из фрагментов, которые вы показали, например, почему он открывается на новой вкладке или как инициируется "сохранить". Однако если вы посмотрите на свое действие сохранения, вы вернете весь вид, когда проверка работает, но только частичный вид, когда это не так. Вам нужно вернуть представление "индекс" для обоих условий, если Save-это результат отправки формы, а если Save-результат вызова ajax, то то, как вы это исправите, зависит от того, что вы еще не показали.