JSONオブジェクトをコントローラメソッドparamに渡す方法を理解しようとしています。私はしばしばフォームをポストするときにJSON.serialize()を使用し、C#へのシリアライゼーションは自動的に行います。しかし、私はGETを使って部分的に読み込もうとしているときにこれを動作させるのに苦労しています。.NET MVC jQuery AJAX - 値をシリアル化しないパラメータとしてのJSONオブジェクト
私は、必要なものの基本的なシミュレーションとして小さなサンプルプロジェクトを構築しました。これは、int paramと別のモデルクラスを受け入れるコントローラメソッドです。これはJSONとして渡したいものです。部分的なhtml応答がdivに読み込まれます。
ビュー:
<div class="row">
Loading a partial via Ajax, passing a JSON object as a param!
</div>
<div class="row">
<div id="peoplePartial"></div>
</div>
@section Scripts {
<script>
$(function() {
var id = 1;
var person = {
Name: "Homer Simpson",
Age: 45
};
load(id, person);
});
function load(id, person) {
$.ajax({
cache: false,
type: "GET",
dataType: "html",
url: '/Home/PeoplePartial',
data: {
id: id,
person: JSON.stringify(person)
}
}).done(function(data) {
$("#peoplePartial").html(data);
}).fail(function(data) {
console.log(data.responseText);
});
}
</script>
}
部分:
@model MVCLearning.Models.PeoplePartialModel
<div>
<span>Person found! Name is @Model.Person.Name</span>
</div>
部分のViewModel:
:public class PeoplePartialModel {
public int Id { get; set; }
public PersonModel Person { get; set; }
}
私はシリアライズしようとしているデータモデル/エンティティ
public class PersonModel {
public string Name { get; set; }
public int Age { get; set; }
}
そして最後に、コントローラ:
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
public ActionResult PeoplePartial(int id, PersonModel person) {
if (person != null) {
var model = new PeoplePartialModel {
Id = id,
Person = person
};
return PartialView("_People", model);
} else {
throw new System.Exception("An Error Has occoured");
}
}
}
は、 "ID" paramが常にもちろん、動作しますが、JSON.stringify()を使用している場合PeopleModelのparamは常にnullです。私はそれがモデルにシリアル化され、ビューからJSから渡されたJSON値を含むと予想していました。 JSON.stringify()を使用せずにこの問題を解決できますが、値は常に無視されます。常にName:null、Age:0として渡されます。私はこのような値を渡すことはできません。
私はPOSTへのajax呼び出しを変更しようとしましたが、何も変わりません。 contentTypeをhtmlとjsonに設定しようとしましたが、何も変更しません。
ありがとうございます。
'GET'では、' JSON.stringify() 'と' PeoplePartial(int id、[FromUri] PersonModel person) 'アクションで' GET'を渡します。基本的には、[ネットワーク]タブを確認し、データがクエリ文字列として渡されているかどうかを確認します。 – Developer