3

アクションを呼び出して、そのアクションがビューに直接レンダリングされた結果の部分ビューを返すか、アクションがサーバー上の別のページにリダイレクトされるようにしたいと考えています。

ただし、jQueryを介してこれを行っているため、ページ/サイトをきれいにリダイレクトして効果的にリロードするのではなく、リダイレクトされたページをターゲットのdiv要素にロードするようです。

jQuery 呼び出し:

$.ajax({
     type: "GET",
     url: "Myurl",
     dataType: "html",
     success: function (data) {
         // replace the context of the section with the returned partial view
         $('#upload_section').html(data);
     }
 });

MVC アクションの例

public ActionResult MyAction() 
{
   bool doRedirect = // some code to determine this condition
   if (doRedirect)
   {
      return RedirectToAction("MyAction", "Home");
   }
   else
   {
      // return the partial view to be shown
      return PartialView("_UploadSessionRow");
   }
}

私はこれをすべて間違っていますか?これを行うためのより良い方法はありますか? これを行う必要性は、他のアクションや jQuery リクエストで発生するため、これを行うための一般的な方法論を探しています。

更新: Andrews の回答のおかげで、彼の提案に従って、いくつかの変更を加えて ajax を変更することで、私が求めていたものを手に入れることができました。最終的な ajax は次のとおりです。

function loadOrRedirect(options) {

    var jData = null;

    try {    
        if (options.data) {
            jData = $.parseJSON(options.data);

            if (jData.RedirectUrl) {
                window.location = jData.RedirectUrl;
            }
        }
    } catch (e) {
        // not json
    }

    if (!jData && options.callback) {
        options.callback(options.data);
    }
};

$.ajax({
     type: "GET",
     url: "Myurl",
     dataType: "html",
     success: function (data) {
         loadOrRedirect(
                       {
                          data: data,
                          callback: function (html) {
                                    replaceRow.replaceWith(html);
                                    alternateRowHighlighting();
                       }
         });
}

});

4

2 に答える 2

18

AJAX リクエストからリダイレクトすることはできません。JavaScript からリダイレクトする必要があります。次のようなものをお勧めします。

public ActionResult MyAction() 
{
   bool doRedirect = // some code to determine this condition
   if (doRedirect)
   {
      return Json(new 
      {
          RedirectUrl = Url.Action("MyAction", "Home")
      });
   }
   else
   {
      // return the partial view to be shown
      return PartialView("_UploadSessionRow");
   }
}

次に、JavaScript 側で:

$.ajax({
     type: "GET",
     url: "Myurl",
     dataType: "html",
     success: function (data) {
         if (data.RedirectUrl) {
             window.location = data.RedirectUrl;
         } else {
             // replace the context of the section with the returned partial view
             $('#upload_section').html(data);
         }
     }
 });
于 2012-09-07T01:08:13.170 に答える
0

コールバックの 2 番目または 3 番目のパラメーターを使用して、success何をすべきかを判断できます。とにかく、ajax を使用しているため、通常のリダイレクトを行うことはできません。JavaScript を使用して 2 番目のリダイレクトを行うか、ページ全体をRedirectToAction

于 2012-09-07T01:08:07.947 に答える