2016-08-28 34 views
0

我無法讓我的動作綁定模型時,我從ajax發佈(通過jQuery)。ASP.Net MVC模型不會綁定在ajax後

型號:

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; 
    } 

這可能不是最好/最安全的,但至少它的工作原理。

我看不出我在這裏做了什麼錯誤,但爲每個模型創建模型綁定器似乎很瘋狂。非阿賈克斯帖子似乎工作正常。

感謝

+0

嘗試'數據:JSON.stringify({注:this.convertFormToJSON(this.options.noteFormElement})),' – Developer

回答

2

你並不需要一個定製ModelBinder。你的價值觀會使用

$.ajax({ 
    url: this.options.editUrl, 
    method: 'POST', 
    data: $('form').serialize(), 
    success: (partialResult) => { 
     this.options.noteModalElement.modal('hide'); 
    } 
}); 

被成功提交您的型號未在POST方法結合的原因是因爲你的參數(note)的名字也是你的模型的屬性的名稱和DefaultModelBinder設置的屬性Note值到張貼的值,但也試圖的NoteEditViewModel實例設置爲該值(一個string),其將失敗,並且模型變得null

變化的方法的到

簽名

,你的模型將被正確綁定

+0

OMG。我應該猜到這是愚蠢的/簡單的。幾天來我一直在這個問題上肆無忌憚。我欠你啤酒! :) – Jonesie