今のところ、HTTP POSTを使用してjsonをasp.net mvc2コントローラに送信したいだけです。モデルとAjaxのないPOST Json
JSONは実際にはJSONオブジェクトのリストであり、それぞれのフィールドには異なるフィールド&があるため、入力モデルを構成するのは難しいです。
私は、ASP.NET MVC2のコントローラにモデル/ ajaxを付けずにJSONを投稿する方法があることを知りたいのですが?
今のところ、HTTP POSTを使用してjsonをasp.net mvc2コントローラに送信したいだけです。モデルとAjaxのないPOST Json
JSONは実際にはJSONオブジェクトのリストであり、それぞれのフィールドには異なるフィールド&があるため、入力モデルを構成するのは難しいです。
私は、ASP.NET MVC2のコントローラにモデル/ ajaxを付けずにJSONを投稿する方法があることを知りたいのですが?
@ 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オブジェクトのコレクション)が返されているにもかかわらず、実際にデータがどのように見えるのかはわかりませんが、データをサポートするためのクラス構造を考案することができます。
JSONを隠しフィールドに保存してから、ユーティリティを使用してJSONをコントローラのオブジェクトに変換することができます。利用可能にするには、フォームの投稿データ内にある必要があります。隠しフィールドに格納する方法の1つは、AJAXを使用してストリームを戻す方法です。
HTH。