Umesh AP Ответов: 3

Отображение ошибки модели в том же всплывающем диалоговом окне в 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 : пожалуйста, смотрите улучшенный вопрос и дайте несколько советов.

3 Ответов

Рейтинг:
26

RaunakGupta

вам нужно добавить этот скрипт на страницу макета

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>


место на виду частичным

<script type="text/javascript" language=javascript>
$.валидатор.ненавязчивый.синтаксический анализ(документ);
</script>

это будет горе


Umesh AP

@Member 12159992 - Спасибо за ответ. используя ваше предложение, теперь ошибки модели отображаются в том же всплывающем окне, не нажимая на действие редактирования контроллеров.
Но следующая проблема заключается в отображении исключений, связанных с базой данных, в том же всплывающем диалоговом окне.

Umesh AP

@Member 12159992 - пожалуйста, смотрите мой обновленный метод действия Edit controller.
Я беспокоюсь о том, что
// Как отобразить ошибку исключения в том же всплывающем окне ???
этот раздел......

Shravansingh Rajpurohit

проверьте мой ответ ниже

Рейтинг:
2

Shravansingh Rajpurohit

ajax - MVC возвращает частичное представление как JSON - Stack Overflow[^]

прочтите это, это также решило мою проблему.


Shravansingh Rajpurohit

дайте мне знать, если у кого-нибудь есть лучшее решение для отображения ошибки на стороне сервера в том же частичном представлении.

Рейтинг:
0

RaunakGupta

поместите любой div на myedit.cshtml.


поместите этот div в свой файл myedit.cshtml.




об успехе или неудаче этого призыва к действию.
отобразите свое исключение на этом div.

использование javascrript


Umesh AP

Спасибо Раунаку за ваше полезное предложение.