[jquery]jquery ajax post能夠正確Model Bind到Asp .net Mvc ... | mvc ajax post
依照不同的情境,jquerypost的呼叫方式其實也會需要不同不然到asp.netmvcmodelbinding的時候很容易失敗,會話很多時間在debug這些問題,以下將會對於3個情境的做法進一步說明。想Post的內容是所有的Form欄位一般來說,在建立Form表單的時候,撰寫上會使用HtmlHelper,這種產生出來的html內容只要post上去asp.netmvcmodelbinding基本上沒有什麼問題。因此可以利用Form表單本身然後透過jquery序列化的方式作為送出的資料。假設我們的Form表單的id是postForm,那麼整個post方式就是:$.ajax({type:"POST",url:"@Url.Action("JqueryPost")...
依照不同的情境,jquery post的呼叫方式其實也會需要不同不然到asp .net mvc model binding的時候很容易失敗,會話很多時間在debug這些問題,以下將會對於3個情境的做法進一步說明。
想Post的內容是所有的Form欄位一般來說,在建立Form表單的時候,撰寫上會使用HtmlHelper,這種產生出來的html內容只要post上去asp .net mvc model binding基本上沒有什麼問題。
因此可以利用Form表單本身然後透過jquery序列化的方式作為送出的資料。
假設我們的Form表單的id是postForm,那麼整個post方式就是:
$.ajax({ type: "POST", url: "@Url.Action("JqueryPost")", data: $("#postForm").serialize() })換句話說其實就是用jquery模擬一般的postsubmit。
想post的內容只是表單裡面幾個欄位有時候要post的內容可能不全部在同一個Form表單,或者可能有幾個不同地方的欄位組成,這個時候,第一種情境的序列化做法就不適合了。
這個時候可能會想說建立一個javascript 物件,然後直接post這個物件。例如,假設後端要binding的model 有 Title和Content欄位:
var data = {}; data.Title = "a"; data.Content = "b"; $.ajax({ type: "POST", url: "@Url.Action("JqueryPost")", data: data })這個會binding成功,因此可能想說都是這麼處理就好,但是,當要binding的物件比較複雜的時候,這個方式就會binding失敗。
舉例來說,假設我們有同樣的model結構,但是這個時候後台變成需要的是一個list,這個時候可能想說傳入array即可:
var data = []; data.push({ Title: "1", Content: "2" ...