ノックアウトモデルを介してコントローラーアクションに送信されたデータに問題があります。各文字列フィールドには、それを囲む余分な二重引用符があります。これは問題です。
データを手動で逆シリアル化することはできますが、MVC3を使用している場合、この問題はまったく発生しないはずです。ajax投稿ではなく、フォーム送信を行う必要があることに注意してください。
HTML:
@inherits System.Web.Mvc.WebViewPage<FbWizardCreateTabModel>
@using (Html.BeginForm("InstallApplication", "FbWizard", FormMethod.Post, new { id = "createtab", @data_bind = "submit:onSubmit" }))
{
<p>Page Id: <span data-bind="text: PageId"></span></p>
<p>Page Name: <span data-bind="text: PageName"></span></p>
<p>Tab Name: @Html.TextBoxFor(m => m.TabName, new { data_bind = "value: TabName" })</p>
}
<button class="btn btn-primary next">Submit</button>
スクリプトコード:
<script type="text/javascript">
var initialData = @Html.Raw(Model.JsonData);
var viewModel = ko.mapping.fromJS(initialData);
viewModel.onSubmit = function() {
var action = $('#createtab').attr('action');
ko.utils.postJson(action, this);
return false;
};
ko.applyBindings(viewModel);
</script>
コントローラのアクション:
[HttpPost]
public ActionResult InstallApplication(FbWizardCreateTabModel model)
{
// The model is mangled at this point, see image below
return View();
}
投稿後のモデルの内容:
生の投稿データ:
POST http://mysite.localhost:7785/Admin/FbWizard/InstallApplication HTTP/1.1
Host: mysite.localhost:7785
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://mysite.localhost:7785/Admin/FbWizard/CreateTab
Cookie: fbsr_....
Content-Type: application/x-www-form-urlencoded
Content-Length: 333
PageId=%22231271443653720%22&PageName=%22Car5%22&TabName=%22Auctions2%22&JsonData=null&__ko_mapping__=%7B%22include%22%3A%5B%22_destroy%22%5D%2C%22ignore%22%3A%5B%5D%2C%22copy%22%3A%5B%5D%2C%22mappedProperties
私は何が間違っているのですか?