2013-07-19 13 views
10

Mam widok (Index.cshtml) z siatką (siatką Infragistics JQuery) z linkiem do obrazu. Jeśli użytkownik kliknie na ten link następująca funkcja jQuery będzie nazwane:Widok nie odświeżający po poście 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); 
}); 

} 

wykomentowane widać alert dla siebie i 2 próby odświeżyć widok. Funkcja location.reload() działa, ale zasadniczo jest to zbyt duża praca dla przeglądarki. .html (wynik) powoduje umieszczenie całego pliku index.cshtml + Layout.cshtml w pliku div uwagi. To nie jest poprawne.

To działanie wywołuje (SetEnddateRemarkToYesterday):

 public ActionResult SetEnddateRemarkToYesterday(int remarkID) { 

     //Some logic to persist the change to DB. 

     return RedirectToAction("Index"); 
    } 

To działanie przekierowuje do:

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

} 

Jeśli nie robię window.location.reload po udana AJAX opublikować widok nigdy nie przeładuje. Jestem nowy w MVC, ale jestem pewien, że jest lepszy sposób na zrobienie tego. Nie rozumiem tutaj czegoś fundamentalnego. Być może szturchnięcie w dobrym kierunku? Z góry dziękuję.

+0

lepiej, aby remarksgrid częściowy widok i zwróci częściowy widok wyniku w metodzie SetEnddateRemarkToYesterday. – ssilas777

+0

@ ssilas777 Masz rację. Zdałem sobie sprawę, że dzień po tym, jak to opublikowałem, jest to rozwiązanie, do którego dążyłem. Dziękuję za odpowiedź. –

Odpowiedz

17

Jak żądania AJAX połączenia należy przekierować za pomocą jego odpowiedź

Modyfikowanie kontroler do powrotu JsonResult z lądowania URL:

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 połączeń:

$.post("Home/SetEnddateRemarkToYesterday", { remarkID: remarkID }, function (result) { 
    window.location.href = result.Url 
}); 
+0

Przetestowałem to. Działa jak sugeruje Satpal. Ostatecznie zdecydowałem się jednak na umieszczenie siatki na częściowym widoku. Wydaje mi się bardziej zgodny z architekturą MVC. Dziękuję za odpowiedź na Satpal. –

4

Po Ajax postu musisz zadzwonić pod określony adres URL. w ten sposób .. window.location.href = Url

0

Podczas korzystania jQuery.post nowa strona jest zwracany metodą .done

jQuery

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

HTML

<body id="reload"> 
Powiązane problemy