:Asp.net MVCデシリアライズのajax.beginForm
using (Ajax.BeginForm("Index", null, new AjaxOptions() { UpdateTargetId = "FormContainer", HttpMethod = "Post", InsertionMode = InsertionMode.Replace, OnSuccess = "successFunc" }, new { id = "UpdateForm" }))
この方法には:
public ActionResult SavePreset(DocumentFilterModel model, string name)
{
//Do some magic
return PartialView("Partial/FilterListPartial", model);
}
ポイントは、デフォルトでは、このフォームからですレポートのプリセットを収集しますが、私はDBにプリセットを保存するオプションを追加する必要があります。そのため、SavePreset
メソッドが必要です。
私はこのスクリプトを使用しようとしました:
$("#SavePresetButton").on("click", function() {
$.ajax({
type: "POST",
url: '@Url.Action("SavePreset", "Reports")',
data: {
name: $("#PresetNameEditor").val(),
model: $("#UpdateForm").serialize()
}
}).success(function(result) {
$("#FilterSettingsContainer").html(result);
});
});
をしかし、私はどちらかnull
はどちらか(string
に変更model
parametrのタイプの場合)DocumentFilterModel model
でそれをデシリアライズすることはできません取得の問題に遭遇してきました。
var SettingsModel = new JavaScriptSerializer().Deserialize<DocumentFilterModel>(model);
var a = JsonConvert.DeserializeObject<DocumentFilterModel>(model);
をちなみに、(これらのフィルタは別々の部分図にあります)私はそのまま私のフォームを維持したいと思い、私はまだレコードのリストを持つ私の第2の部分のビューを更新する必要があるため:私が試してみました物事、DocumentFilterModel
が大きすぎて手動で解析することはできません。
明示的に逆シリアル化する必要はありません。モデルのバインダーはそれを仕事にしましょう。あなたの 'DocumentFilterModel'はどのように見えますか?入力要素をフォームの中でどのようにレンダリングしていますか? – Shyju
問題は、 'DocumentFilterModel'の内部に約70+のプロパティ(オブジェクトの内部に10個あり、それぞれに10個のプロパティを持つ6つの異なるオブジェクトが含まれています)です。そのため、手動で解析することは避けたいオプションです。エディタは 'ViewData.ModelMetadata.Properties'リストを使用して作成されるため、フォームにコードを含めなかったのです。そして、私は 'submit'を使うことはできません。なぜなら、プリセット保存メソッドはフィルタで部分的なビューを返さなければならず、' submit'はレコードで部分的に返さなければなりません( 'UpdateTargetId'プロパティ内の競合)。 – user7803907