【发布时间】:2016-08-29 07:13:25
【问题描述】:
当我从 ajax(通过 jquery)发布时,我无法让模型绑定到我的操作上。
型号:
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;
}
这可能不是最好/最安全的,但至少它有效。
我看不出我在这里做错了什么,但为每个模型创建模型绑定器似乎很疯狂。非 ajax 帖子似乎可以正常工作。
谢谢
【问题讨论】:
-
试试
data: JSON.stringify({ note: this.convertFormToJSON(this.options.noteFormElement})),
标签: ajax asp.net-mvc