繁体   English   中英

在jQuery Ajax调用之后,应用程序无法导航到我要显示的ASP.NET MVC视图。

[英]After jQuery Ajax invocation call , the application Fails to navigate to the ASP.NET MVC view that I want to show

我正在使用jquery DataTables显示一些表格数据,并且还在上述jquery DataTables中为每一行放置了一个编辑链接,以便用户可以根据需要编辑与特定行关联的数据。 (此外,我不知道如何在jQuery DataTables中使用ASP.NET MVC Html帮助器,因此这就是为什么我在以下代码中使用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 Event Handler方法:

jQuery事件处理程序方法/函数Javascript

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

});

jQuery Ajax调用成功调用了C#Controller的动作,因为我看到Visual Studio的Debugger的执行点达到了所说Controller的动作,但是,它无法导航到我要显示的视图。

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);

        }

剃刀/ HTML:(在我的\\ Areas \\ Admin \\ Views \\ Admin \\ AdminModules \\ Auxiliaries \\ AParticularResultCodeAssociatedReasonForArrearsList.cshtml视图中)

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

    @{
        ViewBag.Title = "AParticularResultCodeAssociatedReasonForArrearsList";
    }

    <h2>AParticularResultCodeAssociatedReasonForArrearsList</h2>

有人可以告诉我如何更改代码,以便在调用jQuery Ajax之后显示视图吗?

可能在.done函数上,您将在响应中获取视图,您需要获取该响应并将其绑定到控件

您通过AJAX调用控制器,并确保它命中了控制器操作方法,并且控制器返回了一个视图,但这是您的代码,用于处理从AJAX调用(从控制器)返回的任何内容:

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

您绝对什么也没做,所以为什么要导航到任何地方。

您需要问自己一个更好的问题,而不是解决此问题,是为什么要使用AJAX然后导航到另一个页面。 如果要导航到新页面,新URL,则只需定期提交表单(不使用AJAX)或通过链接(用户将点击链接)进行提交。 如果您想停留在同一页面上并刷新页面内容,请使用AJAX发布。

@ yas-ikeda,@codingyoshi,@ code-first谢谢您的建议。

这是我为解决问题而必须进行的修改(请随时提出改进建议):

基本上,我必须最终创建2个单独的Action方法来解决该问题。 在下面的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
     });

}

名为“ ../Admin/RedirectToNavigateToAParticularResultCodeAssociatedReasonForArrearsList”的第一个操作方法的目的是检索Json对象中的URL。

    [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视图这一事实,因此,请随时提出改进建议,甚至是完全不同的更好解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM