devdev13 Ответов: 2

ASP.NET в MVC - ответ JSON отправляет мне файл, а не выполнение функции, чтобы закрыть диалоговое jqueryUI


Я возвращаю данные json, и я могу подтвердить, что он возвращает данные клиенту. но вместо того, чтобы обновить мой jqueryaccordion, он просит меня сохранить или открыть файл. Ниже приведен мой скрипт и контроллер. Я использовал модальный диалог jquery для редактирования сведений о сотруднике через частичное представление, и нажатие кнопки Обновить должно обновить соответствующего сотрудника в списке аккордеонов.Любая помощь будет очень признательна - спасибо

При отладке с помощью инструментов IE я заметил, что при нажатии кнопки "Обновить" на вкладке "запрос" отображается "инициатор". Я предполагаю, что это должно быть "XMLHttpRequest" вместо этого. Надеюсь, эта информация поможет. Спасибо


**общий вид**

@Html.ActionLink("Edit Employee", "EditEmployee", "Home",
                        new { id = item.Id }
                        , new { @class = "editLink" })


**Частичный просмотр с помощью формы редактирования сотрудника - EditEmployee.cshtml**


@using (Ajax.BeginForm("EditEmployees", "Home", new AjaxOptions
         {
             InsertionMode = InsertionMode.Replace,
             HttpMethod = "POST",
             OnSuccess = "updateSuccess"
         }, new { @id = "updateEmployeeForm" }))
     {
         <div class="editor-label">
             @Html.LabelFor(model => model.Name)
         </div>
         <div class="editor-field">
             @Html.TextAreaFor(model => model.Name)
             @Html.ValidationMessageFor(model => model.Name)
         </div>

 }


**Результат действия, возвращающий частичное представление, содержащее форму editemployee**


Public ActionResult EditEmployee(int id)
   {
   //DataAccess part
   return PartialView("EditEmployee",employeedata);
   }


**Контроллер, который возвращает результат Json после обновления сведений о сотруднике**

[HttpPost]
Public JsonResult EditEmployee(Models.Employee employee)
{
       //Data access part

     JsonResult result = new JsonResult();
                            result.Data = employeeData;
                            return result;
}


**Скрипт на главном экране**

  <script type="text/javascript">
           var linkObj;
           $(function () {
               $(".editLink").button();

           $('#updateDialog').dialog({
               autoOpen: false,
               width: 400,
               resizable: false,
               modal: true,
               buttons: {
                   "Update": function () {
                       $("#update-message").html('');
                       $("#updateEmployeeForm").submit();
                   },
                   "Cancel": function () {
                       $(this).dialog("close");
                   }
               }
           });

           $(".editLink").click(function () {
               //change the title of the dialog
               linkObj = $(this);
               var dialogDiv = $('#updateDialog');
               var viewUrl = linkObj.attr('href');
               $.get(viewUrl, function (data) {
                   dialogDiv.html(data);

                   var $form = $("#updateEmployeeForm");
                   // Unbind existing validation
                   $form.unbind();
                              dialogDiv.dialog('open');
               });
               return false;
           });

       });

function updateSuccess(data) {
// I want to make sure that this function gets executed on Success instead of a file being sent back to me from the server
 $('#updateDialog').dialog('close');
 $('#commonMessage').html("Update Complete");
 $('#commonMessage').delay(400).slideDown(400).delay(3000).slideUp(400);
 alert("hello");

       }

Moykn

это правильно? @использование ("Аякс".Бигинформ("EditEmployees", "дом", новый AjaxOptions не должно быть @использование ("Аякс".Бигинформ("EditEmployee", "дом", новый AjaxOptions ?

devdev13

Да. - Вот именно. Он правильно прописан в коде. Спасибо. Есть еще предложения ?

2 Ответов

Рейтинг:
20

Christoph Keller

Привет,

Обычно это происходит, если вы пытаетесь разместить форму в IFrame, и результатом является JSON (в основном используется в Ajax-fileuploads.

Проблема заключается в том (в вышеупомянутом сценарии), что IE не обнаруживает результат JSON в виде текста для отображения, поэтому он предполагает, что вы хотите его загрузить.

Чтобы обойти это поведение, вы можете просто изменить его:

JsonResult result = new JsonResult();
result.Data = employeeData;
return result;


в это:

JsonResult result = new JsonResult();
result.Data = employeeData;
result.ContentType = "text/plain";
return result;


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

Попробуйте, возможно, это тоже решит вашу проблему :)
Надеюсь, это поможет.

С наилучшими пожеланиями и счастливым кодированием,
Крис


Рейтинг:
0

Moykn

Наверное вы забыли добавить jquery.unobtrusive-ajax.min.js на вашу страницу, проверьте ее, пожалуйста.

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