2013-07-19 63 views
10

我有一个视图(Index.cshtml)与网格(Infragistics的JQuery网格)与图像链接。如果用户点击该链接下面的jQuery函数将被调用:AJAX后查看不刷新后

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(结果)在remarksgrid div中发布整个index.cshtml + Layout.cshtml double。所以这是不正确的。

这是它调用的动作(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); 

} 

如果我没有在succesfull后做window.location.reload AJAX发布视图将永不重新加载。我是MVC的新手,但我确信有更好的方法来做到这一点。我在这里并不了解一些基本的东西。也许是在正确的方向推动?先谢谢你。

+0

更好地使remarksgrid的局部视图,并返回一个局部视图导致SetEnddateRemarkToYesterday方法。 – ssilas777

+0

@ ssilas777你说得对。我意识到我发布这一天后的第二天,这是我所追求的解决方案。谢谢你的回复。 –

回答

17

当你请求AJAX调用,你应该重定向使用它的响应

修改您的控制器与登陆网址返回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 
}); 
+0

经过测试。按照Satpal的建议工作。最后,我尽力将网格放在局部视图上。这对我来说似乎更符合MVC架构。感谢您回复Satpal。 –

4

后阿贾克斯后你需要打电话给特定的Url .. 这样.. window.location.href = Url

0

当使用jQuery.post新的页面通过.done方法返回

jQuery的

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

HTML

<body id="reload">