Отображение ошибки модели в том же всплывающем диалоговом окне в MVC 4
Я разрабатываю приложение, которое имеет Index.cshtml (основная страница с критериями поиска и кнопкой поиска), _PartialView.cshtml (частичное представление, отображающее записи со ссылками обновления/удаления), Edit.cshtml (представление для обновления).
После нажатия на ссылку Обновить открывается всплывающее модальное диалоговое окно, содержащее представление редактирования (Edit.cshtml) Я применил атрибут Required &stringlength к некоторым полям. Если некоторые из атрибутов не выполнены, я хочу отобразить их в том же всплывающем окне. Но в методе действия контроллера я возвращаю представление, поэтому модальное всплывающее окно исчезает и открывается вид редактирования в div.
Мои записи отображаются в виде сетки в partialView (_PartialView.cshtml) со ссылкой обновления и функцией javascript как
<a href="javascript:void(0);" class="anchorDetail" onclick="editFunc(@item.SrNo)" ">Update</a>
function editFunc(id) { var TeamDetailPostBackURL = '/Home/Edit'; var $buttonClicked = $(this); var options = { "backdrop": "static", keyboard: true }; $.ajax({ type: "GET", url: TeamDetailPostBackURL, cache: false, contentType: "application/json; charset=utf-8", data: { "SrNo": id }, datatype: "json", success: function (data) { $('#myModalContent').html(data); $('#myModal').css('display', 'block'); $("#myModal").dialog({ title: 'Edit Data', modal: true, bgiframe: true, show: 'slide', hide: 'slide', width: 750 }); $('#myModal').dialog("show"); }, error: function () { alert("Dynamic content load failed."); } }); }
Моя Правка.cshtml по :
@using (Ajax.BeginForm("Edit", "Home", new AjaxOptions { UpdateTargetId = "divPartial", HttpMethod = "POST", InsertionMode = InsertionMode.Replace, OnBegin = "CallEditBegin", OnSuccess = "CallUnblock" })) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) <fieldset> <div class="editor-label" style="display:none" > @Html.LabelFor(model => model.SrNo) </div> <div class="editor-field" style="display:none"> @Html.EditorFor(model => model.SrNo) @Html.ValidationMessageFor(model => model.SrNo) </div> <div class="editor-label"> @Html.LabelFor(model => model.UserName) </div> <div class="editor-field"> @Html.EditorFor(model => model.UserName) @Html.ValidationMessageFor(model => model.UserName) </div> <div class="editor-label"> @Html.LabelFor(model => model.ReaderName) </div> <div class="editor-field"> @Html.EditorFor(model => model.ReaderName) @Html.ValidationMessageFor(model => model.ReaderName) </div> <div class="editor-label"> @Html.LabelFor(model => model.UploadDate) </div> <div class="editor-field"> @Html.TextBoxFor(model => model.UploadDate, new { @readonly = "readonly" }) @Html.ValidationMessageFor(model => model.UploadDate) </div> <p> <input type="submit" value="Save" /> </p> </fieldset> }
Мой домашний контролер.cs
[HttpPost] public ActionResult Edit(UploadData uploadData) { if (!ModelState.IsValid) { return View(uploadData); } else { // Processing Logic here string strResult = uploadDataBusinessLayer.InsertUpdateUploadData(uploadData, "Update"); if (strResult == "Success") { // Do return Partial View } else { // How to display exception error in same popup ??? } } }
Сейчас некоторые подали необходимые и ReaderName имеет ограничения длины мин 6 символов. Если какое-либо из условий не выполнено
if (!ModelState.IsValid) { return View(uploadData); }этот блок будет выполнен.
Но то, что произошло дальше, мой всплывающий диалог исчезает, и div будет открыт на главном pg, отображающем сообщение об ошибке.
Я хочу показать их на самом всплывающем окне перед контролем.
Я путаю, что делать в случае ошибок модели.
Пожалуйста, дайте несколько советов, чего мне не хватает.....
Что я уже пробовал:
Поискал в google, но не смог найти никакой подходящей информации.......
j snooze
Ваш вопрос можно было бы улучшить, сообщив нам, что это за ошибка и что вы сделали, чтобы получить ошибку(что было нажато или отправлено обратно, из какого метода исходит ошибка) Вы можете получить все это, отладив код.
Umesh AP
@j snooze : пожалуйста, смотрите улучшенный вопрос и дайте несколько советов.