ajaxから(jquery経由で)投稿するときに、アクションにバインドするモデルを取得できません。ajax投稿でASP.Net MVCモデルがバインドされない
モデル:
public class NoteEditViewModel
{
public bool AddMode { get; set; }
public int ID { get; set; }
public int PersonID { get; set; }
public string Note { get; set; }
public NoteEditViewModel()
{
}
}
処置:
[HttpPost]
public ActionResult Edit(NoteEditViewModel note)
{
...
}
JS:(実際に活字体)
$.ajax({
url: this.options.editUrl,
method: 'POST',
data: JSON.stringify(this.convertFormToJSON(this.options.noteFormElement)),
//data: $(this.options.noteFormElement).serialize(),
//data: JSON.stringify({
// AddMode: $("#AddMode").val(),
// ID: $("#ID").val(),
// PersonID: $("#PersonID").val(),
// Note: $("#Note").val()
//}),
//dataType: 'json',
//traditional:true,
//contentType: 'application/json; charset=utf-8',
success: (partialResult) => {
this.options.noteModalElement.modal('hide');
}
});
convertFormToJSON(form : JQuery) {
var array = form.serializeArray();
var json = {};
jQuery.each(array, function() {
json[this.name] = this.value || '';
});
return json;
}
あなたは私がここで試したものを見ることができます。アクションは、モデルの空のインスタンスまたはnullを受け取ります。
私は、これは、このように、カスタムModelBinderで動作するように得ることができなかった:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var body = controllerContext.RequestContext.HttpContext.Request.Form[0];
var model = JsonConvert.DeserializeObject<NoteEditViewModel>(body);
return model;
}
これは最高の/最も安全ではないかもしれないが、少なくともそれが動作します。
私がここで間違っていることはわかりませんが、モデルごとにモデルバインダーを作成するのは狂っているようです。非アヤックスの投稿はうまくいくようです。
おかげ
'データを試してみてバインドされます。JSON.stringify({注:this.convertFormToJSON(this.options.noteFormElement}))、' – Developer