2011-08-24 9 views
0

jsonをコントローラアクションにポストするときに[fromJson]属性を使用したMVC2の古い例を使用していましたが、ModelStateなどのモデルエラーを捕捉しなかった点以外はうまくいきました。 IsValidは常にtrueです。 JSONの投稿はMVC3に組み込まれているので、コードをアップグレードしました。しかし、今私は別の問題を持っています:Knockoutとko.utils.postJsonの問題

ko.utils.postJson(location.href, json); 

バインディングは機能しておらず、私のモデルは空です。

しかし、私はjQueryの使用している場合:

$.ajax({ 
          url: '@Url.Action("Create")', 
          contentType: 'application/json; charset=utf-8', 
          type: "POST", 
          data: json, 
          dataType: 'json', 
          success: function(result) { 
           alert("yay"); 
          }, 
          error: function(xhr, ajaxOptions, thrownError) { 
           alert(xhr.statusText + " " + xhr.responseText); 
          } 
         }); 

をので、私はjQueryの$アヤックスに私のko.utils.postJsonを移動すると思いますが、どのように私はちょうどので、私はその後RedirectToActionを行うことができます投稿できますか?

ko.utils.postJsonが「通常」の形式提出しているので、私はノックアウトフォーラムでこのhttp://groups.google.com/group/knockoutjs/browse_thread/thread/e631a544de2ad51eを発見した

public ActionResult Create(QuestionViewModel questionViewModel){ 

    if (ModelState.IsValid) 
    { 
     questionViewModel.Save(); 

     TempData.Add(Config.MODEL, questionViewModel); 
     return RedirectToAction("Edit"); 
    } 

    PopulateViewBag(); 

    return View(questionViewModel); 
} 

:コントローラのアクションは、次のようになります。これは私がやりたいことなので、アプリケーションの流れは変わりません。

+0

あなたの意向は何ですか? ajax呼び出しを実際のAjax呼び出しの応答を返す新しいURLにリダイレクトするか、ブラウザの現在のページ全体を別のURL(リフレッシュ)にリダイレクトしますか? – Zasz

+0

私は上記を明確にしようとしました。 – rafn

答えて

0

$ .ajax()は<form>タグを作成して送信しないため、ajax投稿時にRedirectToActionのようなことはできません。 ko.utils.postJsonでは、内部的にDOMにクイックフォームタグを作成し、スクリプトを介して提出したため、すべてのことを行うことができました。あなたは何ができるか

は次のとおりです。

$.ajax({ 
    statusCode: { 
    302: function() { 
     window.location.replace("http://Domain.com/Controller/Edit") 
    } 
    } 
}); 

This質問は、私は、スクリプト経由でブラウザをリダイレクトする方法を見つける助けました。 Thisページには、サーバーから返されたさまざまなステータスコードを処理する方法が記載されています。コントローラーでRedirectToAction()を使用すると、ASP.NET MVC3は302ステータスコードを返します。これは上記のようにapproperiateハンドラを追加することで処理できます。

+0

これはかなりうまくいきますが、私はJavaScriptでこれを追跡することに満足していません。おそらく私はノックアウトに戻り、私の元の問題だったモデルのいくつかのバリデーションを実装します... hmmm – rafn

+0

もしあなたがJavaScriptをURLに置くことに不快なら、[this](http:// answer.questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call)答え。またはさらに適切な、[this](http://stackoverflow.com/questions/1557602/jquery-and-ajax-response-header)を見て、実際に** Location **ヘッダーから移動するためのURLを読んでください応答から。 – Zasz