最近、アプリケーションを MVC3 から MVC4 に更新しました。MVC4では、ViewModel にStudio
やStudioExecutive
のようなプロパティ名があると、投稿時に問題が発生することがわかりました。コントローラ メソッドでは、いつデータが入力されるかを常に取得Studio = null
しStudioExecutive
ます。
これは私たちの問題の例であり、この問題に対する答えがあることを願っています.
データ クラス:
public class TestContact
{
public List<TestContactItem> Studio { get; set; }
public List<TestContactItem> StudioExecutive { get; set; }
public TestContact()
{
Studio = new List<TestContactItem>();
StudioExecutive = new List<TestContactItem>();
}
}
public class TestContactItem
{
public int Id { get; set; }
public string Name { get; set; }
}
コントローラーの方法:
public ActionResult TestContactView()
{
var vm = new TestContact();
vm.Studio.Add(new TestContactItem(){Id=1, Name = "Studio Contact ID=1"});
vm.StudioExecutive.Add(new TestContactItem() { Id = 2, Name = "Studio Exec Contact ID=2" });
return View(vm);
}
[HttpPost]
public ActionResult SaveTestContact(TestContact model)
{
return Content("success");
}
View / Ajax POST を使用した JavaScript:
@using System.Web.Script.Serialization
@model TestContact
<button type="button" onclick="SaveTestContact();">Click Here to Post</button>
<script type="text/javascript">
$(document).ready(function() {
globalTestModel = @Html.Raw(new JavaScriptSerializer().Serialize(Model));
});
function SaveTestContact() {
// passing additional studio & studio executive parameter to controller because it was not mapping correctly to the server side viewmodel without it
$.ajax({
type: "POST",
url: "/Test/SaveTestContact",
data: JSON.stringify(globalTestModel),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (msg) {
}
});
}
</script>
この例では、オブジェクトに少なくとも 1 つと 1Studio
つStudioExecutive
を入力し、ビューをレンダリングします。ビューのボタンをクリックすると、同じオブジェクトがコントローラー メソッドに POST されますが、ViewModel が正しくバインドされず、Studio
プロパティが null に設定されます。
*残念ながら画像を投稿できません。Studio
カウントが 0 でStudioExecutive
カウントが 1であることを示すオブジェクトのスクリーンショットがあります。
POST の前にブレークポイントを配置して、JavaScript のシリアル化が正しく、オブジェクトが読み込まれたことを確認しました。
これは、一方が他方の部分文字列である 2 つのプロパティの命名規則に関係していると結論付けました。同じ問題に遭遇し、私たちを正しい方向に向けることができる人.