2013-07-19 7 views
10

私はimagelinkを持つグリッド(Infragistics JQueryグリッド)を持つビュー(Index.cshtml)を持っています。ユーザーがこのリンクをクリックすると、次の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(結果)は、remark.cgtml + Layout.cshtmlの全体をremarksgridのdivに投稿します。それは正しいものではありません。

これは、それが(SetEnddateRemarkToYesterday)を呼び出すアクションです:

 public ActionResult SetEnddateRemarkToYesterday(int remarkID) { 

     //Some logic to persist the change to DB. 

     return RedirectToAction("Index"); 
    } 

これは、それがリダイレクトアクションです:私はsuccesfullの後window.location.reloadをしない場合は

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

} 

ビューは再ロードされません投稿するAJAXを投稿してください。私はMVCの新人ですが、これを行うためのより良い方法があると確信しています。私はここで何か基本的なことを理解していない。おそらく正しい方向への微妙な動き?前もって感謝します。

+0

ベターHTML部分的なビューはSetEnddateRemarkToYesterdayメソッドの結果となります。 – ssilas777

+0

@ ssilas777あなたは正しいです。私がこれを投稿した翌日、これは私が行った解決策であることに気付きました。返信ありがとうございます。 –

答えて

17

あなたは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 
}); 
+0

それをテストしました。サパールが提案する作品。最終的に私はグリッドを部分的なビューに置くために行った。私にとってMVCアーキテクチャに沿っているようです。 Satpalに返信してくれてありがとう。 –

4

Ajaxのポストの後あなたは特定の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); 
    }); 

部分図をremarksgrid作成し、返すこと

<body id="reload"> 
関連する問題