11

我有一个带有图像链接的网格(Infragistics JQuery 网格)的视图(Index.cshtml)。如果用户单击此链接,将调用以下 jquery 函数:

function ConfirmSettingEnddateRemarkToYesterday(remarkID) {

    //Some code...

    //Call to action.
$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID },  function (result) {
    //alert('Succes: ' + remarkID);
    //window.location.reload();
    //$('#remarksgrid').html(result);
});

}

注释掉你可以看到我自己的警报和 2 次尝试刷新视图。location.reload() 有效,但对于浏览器来说基本上是太多的工作。.html(result) 在备注网格 div 中发布整个 index.cshtml + Layout.cshtml 双倍。所以这是不正确的。

这是它调用的操作 (SetEnddateRemarkToYesterday):

       public ActionResult SetEnddateRemarkToYesterday(int remarkID) {

        //Some logic to persist the change to DB.

        return RedirectToAction("Index");
    }

这是它重定向到的操作:

[HttpGet]
public ActionResult Index() {
    //Some code to retrieve updated remarks. 
    //Remarks is pseudo for List<Of Remark>
    return View(Remarks);

}

如果我在成功的 AJAX 发布后不执行 window.location.reload,则视图将永远不会重新加载。我是 MVC 的新手,但我确信有更好的方法来做到这一点。我不了解这里的基本内容。也许是朝着正确的方向轻推?先感谢您。

4

4 回答 4

19

当您请求 AJAX 调用时,您应该使用其响应重定向

修改您的控制器以返回带有登陆 url 的 JSONResult:

public ActionResult SetEnddateRemarkToYesterday(int remarkID) {
    //Some logic to persist the change to DB.
    var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index", "Controller");
        return Json(new { Url = redirectUrl });
}

JS 调用:

$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID },  function (result) {
    window.location.href = result.Url
});
于 2013-07-19T11:32:35.463 回答
4

在 Ajax 发布后,您需要调用特定的 Url.. 像这样.. window.location.href = Url

于 2013-07-30T11:25:10.413 回答
0

使用jQuery.post时,新页面通过.done方法 返回

jQuery

jQuery.post("Controller/Action", { d1: "test", d2: "test" })
  .done(function (data) {
      jQuery('#reload').html(data);
  });

HTML

<body id="reload">
于 2017-03-20T19:09:08.170 回答
0

对我来说这有效。首先,我在表单中创建了 id="reload",然后使用 Colin 提供的解决方案并使用 Ajax 将数据发送到控制器并刷新了我的表单。

看起来我的控制器:

[Authorize(Roles = "User")]
[HttpGet]
public IActionResult Action()
{
    var model = _service.Get()...;
    return View(model);
}

[Authorize(Roles = "User")]
[HttpPost]
public IActionResult Action(object someData)
{

    var model = _service.Get()...;

    return View(model);
}

看法:

<form id="reload" asp-action="Action" asp-controller="Controller" method="post">
    .
    .
    .
</form>

Javascript函数,在这个函数中我添加了这个块:

$.ajax({
    url: "/Controller/Action",
    type: 'POST',
    data: {
        __RequestVerificationToken: token, // if you are using identity User
        someData: someData
    },
    success: function (data) {
        console.log("Success")
        console.log(data);
        var parser = new DOMParser();
        var htmlDoc = parser.parseFromString(data, 'text/html'); // parse result (type string format HTML)
        console.log(htmlDoc);
        var form = htmlDoc.getElementById('reload'); // get my form to refresh
        console.log(form);
        jQuery('#reload').html(form); // refresh form
    },
    error: function (error) {
        console.log("error is " + error);
    }
});
于 2021-01-01T01:30:16.443 回答