После вызова вызова jQuery Ajax приложение не может перейти к представлению ASP.NET MVC, которое я хочу показать - PullRequest
0 голосов
/ 11 октября 2018

Я использую jquery DataTables, чтобы показать некоторые табличные данные, и я также поместил ссылку редактирования для каждой строки в упомянутых jquery DataTables, чтобы пользователь мог редактировать данные, связанные с определенной строкой, если это необходимо.(Кроме того, я понятия не имею, как использовать помощники ASP.NET MVC Html в jQuery DataTables, поэтому я использую ссылку html в следующем коде)

jquery DataTable javascript:

   $("#resultCodeTable").dataTable({
            "processing": true,
            "serverSide": false,
            "destroy": shouldDestroy,
            "ajax": {
                "url": "../Admin/LoadResultCodes",
                "type": "GET",
                "datatype": "json",
                "data": function (data) {

                    data.actionCodeIDArg = actionCodeIDInQuestion;

                }

            },

....................................
............................
..............
            columnDefs: [
              {
{
                  targets: 1,
                  searchable: false,
                  orderable: false,
                  name: "EditResultCodeInQuestionReasonForArrears",
                  "data": "ID",
                  render: function (data, type, full, meta) {
                      if (type === 'display') {

                          data = '<a class="editResultCodeInQuestionReasonForArrears"  href="javascript:void(0)" data-id="' + full.ID + '">Edit RFAs</a>'
                      }

                      return data;
                  }
              },
....................................
............................
..............

Нажатие на вышеупомянутую ссылку гарантирует, что точка выполнения достигнет следующего метода обработчика событий jQuery:

Метод / функция обработчика событий jQuery Javascript

$('#resultCodeTable').on('click', '.editResultCodeInQuestionReasonForArrears', function () {
    console.log(this.value);
    navigateToAParticularResultCodeAssociatedReasonForArrearsList($(this).data('id'));

});

Вызов jQuery Ajax успешно вызывает действие контроллера C #, потому что я вижу, что точка выполнения отладчика Visual Studio достигает действия указанного контроллера, однако не удается перейти к представлениючто я хочу показать.

jquery / javascript:

function navigateToAParticularResultCodeAssociatedReasonForArrearsList(resultCodeTable_ID) {
    console.log(resultCodeTable_ID);
    $.ajax({
         url: '../Admin/NavigateToAParticularResultCodeAssociatedReasonForArrearsList',
        type: 'POST',
        dataType: 'json',
        contentType: "application/json;charset=utf-8",
        data: "{'" + "resultCodeTable_IDArg':'" + resultCodeTable_ID + "'}",
        cache: false,
    }).done(function (response, status, jqxhr) {


    })
.fail(function (jqxhr, status, error) {
    // this is the ""error"" callback
});

}

C #: (в моем AdminController.cs)

public ActionResult NavigateToAParticularResultCodeAssociatedReasonForArrearsList(int resultCodeTable_IDArg)
        {


            AParticularResultCodeAssociatedReasonForArrearsListViewModel aParticularResultCodeAssociatedReasonForArrearsListViewModel = new AParticularResultCodeAssociatedReasonForArrearsListViewModel();
            aParticularResultCodeAssociatedReasonForArrearsListViewModel.ResultCodeTable_ID = resultCodeTable_IDArg;
           return View("~/Areas/Admin/Views/Admin/AdminModules/Auxiliaries/AParticularResultCodeAssociatedReasonForArrearsList.cshtml", aParticularResultCodeAssociatedReasonForArrearsListViewModel);

        }

Razor / Html: (в моем представлении \ Areas \ Admin \ Views \ Admin \ AdminModules \ Auxiliaries \ AParticularResultCodeAssociatedReasonForArrearsList.cshtml)

@model Trilogy.Areas.Admin.ViewModels.Auxiliaries.AParticularResultCodeAssociatedReasonForArrearsListViewModel

    @{
        ViewBag.Title = "AParticularResultCodeAssociatedReasonForArrearsList";
    }

    <h2>AParticularResultCodeAssociatedReasonForArrearsList</h2>

Может кто-нибудь, пожалуйстаскажите, как я могу изменить код, чтобы представление отображалось после вызова jquery Ajax?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вы вызываете контроллер через AJAX, и он обязательно обращается к методу действия контроллера, и контроллер возвращает представление, но это ваш код, который имеет дело с тем, что возвращается из вызова AJAX (из контроллера):

.done(function (response, status, jqxhr) {})

Вы абсолютно ничего не делаете, поэтому зачем ему перемещаться куда-либо.

Лучший вопрос, который вы должны задать себе, вместо того, чтобы исправить это, - зачем вам использовать AJAX, а затем переходить на другую страницу,Если вы переходите на совершенно новую страницу, новый URL, то просто регулярно отправляйте форму (без AJAX) или делайте это по ссылке (по которой пользователь будет щелкать).Используйте сообщение AJAX, если хотите остаться на той же странице и обновить содержимое страницы.

0 голосов
/ 13 октября 2018

@ yas-ikeda, @codingyoshi, @ code-first Спасибо за ваши предложения.

Вот изменения, которые мне пришлось внести для решения проблемы (пожалуйста, не стесняйтесь предлагать улучшения):

По сути, мне пришлось создать 2 отдельных метода действий для решения проблемы.В приведенном ниже коде jquery / Javascript важно отметить первый метод действия '../Admin/RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList'

function navigateToAParticularResultCodeAssociatedReasonForArrearsList(resultCodeTable_ID) {
    console.log(resultCodeTable_ID);



    $.ajax({
        url: '../Admin/RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList',
        type: 'POST',
        dataType: 'json',
        contentType: "application/json;charset=utf-8",
        data: "{'" + "resultCodeTable_IDArg':'" + resultCodeTable_ID + "'}",
        cache: false,
    }).done(function (response, status, jqxhr) {
        window.location.href = response.Url;

    })
    .fail(function (jqxhr, status, error) {
        // this is the ""error"" callback
     });

}

Цель 1-го метода действия, называемого' ../Admin/RedirectToNavssocarsRearsCaseRoControl_Conject_Rate_Conject_Baseзаключается в получении URL-адреса внутри объекта Json.

    [HttpPost]
    public ActionResult RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList(int resultCodeTable_IDArg)
    {
        var redirectUrl = new UrlHelper(Request.RequestContext).Action("NavigateToAParticularResultCodeAssociatedReasonForArrearsList", "Admin", new { resultCodeTable_IDArg = resultCodeTable_IDArg });
        return Json(new { Url = redirectUrl });
    }

Цель второго метода действия - в конечном итоге перейти к представлению ASP.NET MVC, которое я хочу показать.

    public ActionResult NavigateToAParticularResultCodeAssociatedReasonForArrearsList(int resultCodeTable_IDArg)
    {


        AParticularResultCodeAssociatedReasonForArrearsListViewModel aParticularResultCodeAssociatedReasonForArrearsListViewModel = new AParticularResultCodeAssociatedReasonForArrearsListViewModel();
        aParticularResultCodeAssociatedReasonForArrearsListViewModel.ResultCodeTable_ID = resultCodeTable_IDArg;
        aParticularResultCodeAssociatedReasonForArrearsListViewModel.RFACodeList = actionCodeResultCodeBusinessService.GetSpecificResultCodeRFACodeList(resultCodeTable_IDArg);

       return View("~/Areas/Admin/Views/Admin/AdminModules/Auxiliaries/AParticularResultCodeAssociatedReasonForArrearsList.cshtml", aParticularResultCodeAssociatedReasonForArrearsListViewModel);

    }

Однако мне не нравится тот факт, что мне приходится использовать 2 метода действий для перехода к нужному представлению asp.net mvc, поэтому, пожалуйста, не стесняйтесь предлагать улучшения или даже совершенно иное лучшее решение.

0 голосов
/ 11 октября 2018

Может быть включена функция .done, вы получите представление в ответе, вам нужно взять этот ответ и связать его с вашим элементом управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...