2010-11-23 3 views
4

今のところ、HTTP POSTを使用してjsonをasp.net mvc2コントローラに送信したいだけです。モデルとAjaxのないPOST Json

JSONは実際にはJSONオブジェクトのリストであり、それぞれのフィールドには異なるフィールド&があるため、入力モデルを構成するのは難しいです。

私は、ASP.NET MVC2のコントローラにモデル/ ajaxを付けずにJSONを投稿する方法があることを知りたいのですが?

答えて

3

@ Brianの回答を基にして、これを正確に行っています。これはJquery 1.4.2であることを覚えておいてください。

これはちょっと壊れていて簡略化されていますが、ポストではなくコールバックを使用しています。最初は結果をリアルタイムでフィルタリングし、最初のページを同じ領域に再読み込みするために使用されました。

まず、ページ上にボタン/リンクなどがあります。これはjavascriptを呼び出してjsonデータをビルドします。

<input type="button" alt="Update" onclick="doStuff();" /> 

次に、doStuff()関数があります。この場合、リファインメントはjsonオブジェクトの集合です。

function doStuff() { 

     var refinements = GetRefinementSelections(); 
     var profileId = '<%= Model.Profile.ProfileId %>'; 

     var startDate = $('#SearchbyDateFrom').val(); 
     var endDate = $('#SearchbyDateTo').val(); 

     var jsonData = JSON.stringify(
      { 
       "ProfileId" : profileId, 
       "RefinementGroups": refinements, 
       "StartDate": startDate, 
       "EndDate": endDate 
      }); 

      $('#jsonData').val(jsonData); 
      $('#update-button').click(); 
    } 

次に、doStuff()がデータを格納する非表示フィールドを持つajaxフォームがあります。これは通常の古い形式でも可能です。

<% using (Ajax.BeginForm("MyAction", "MyController", new { }, 
     new AjaxOptions { }, 
     new { id = "filteredResultsForm" })) 
    { %> 
    <input type="submit" id="update-button" style="display:none;" /> 
    <%= Html.Hidden("jsonData")%> 
<% } %> 

したがって、このボタンでクリックが呼び出され、サーバーへのコールバックが発生します。コントローラーでのアクションは次のとおりです。 JsonSerializerはその上のクラスオブジェクト、およびすべてのプロパティ、サブクラスとそのプロパティ、およびであることが必要であるなど、このアプローチが機能するために、シリアライズする必要がJsonRequest Newtonsoft.Json

public ActionResult MyAction(string jsonData) 
    { 
     JsonSerializer serializer = new JsonSerializer(); 

     StringReader sr = new StringReader(jsonData); 
     Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr); 

     JsonRequest jsonRequest = (JsonRequest)serializer.Deserialize(reader, typeof(JsonRequest)); 

     //do work with object 

     return View(); 
    } 

の一部です。流体データセット(jsonオブジェクトのコレクション)が返されているにもかかわらず、実際にデータがどのように見えるのかはわかりませんが、データをサポートするためのクラス構造を考案することができます。

1

JSONを隠しフィールドに保存してから、ユーティリティを使用してJSONをコントローラのオブジェクトに変換することができます。利用可能にするには、フォームの投稿データ内にある必要があります。隠しフィールドに格納する方法の1つは、AJAXを使用してストリームを戻す方法です。

HTH。

関連する問題