2012-10-01 104 views
-1

我有一個ajax形式如下:jQuery的帖子內容

@using (Ajax.BeginForm("Action", "Ctrler", null, new AjaxOptions { UpdateTargetId = "divSendML" }, new { id = "frmSendML" })) 
{ 
    <div id="divSendML"> 

    @Html.EditorFor(x => x.SomeProperties) 
    ... 

    <div id="divPreview"></div> 

    </div> 
} 

然後我叫jQuery的崗位更新標籤divPreiview的內容,我想張貼此Ajax表單的內容:

function PreViewGenerateHtml() { 
    var form = $("#frmSendML"); 
    $.post("/Ctrler/Action", 
      form.serializeArray(), 
      function (data) { 
       $("#divPreview").html(data); 
      }); 
} 

[HttpPost] 
public ActionResult Action(ActionModel model) 
{ 
} 

在服務器端,爲什麼映射模型沒有SomeProperties值。

+0

請記住,不會映射私有屬性 – Bardo

回答

0

不知道你爲什麼寫這個PreViewGenerateHtml javascript函數。當您使用Ajax.BeginForm幷包含jquery不顯眼的腳本時,它會自動對生成的表單進行AJAX化,並且當您單擊提交按鈕時,它將異步地將其發送到服務器。

如果在另一方面,你要手動AJAXify形式,你應該使用一個正常的Html.BeginForm而不是Ajax.BeginForm,然後通過form.serialize()而不是form.serializeArray()$.post方法。

目標控制器操作將收到完全相同的POST數據,就像它是一個普通的HTML表單一樣。因此,如果您希望默認模型聯編程序綁定您的模型,則必須正確命名您的輸入字段名稱。這裏有一篇文章說明預期的format for binding to collections

如果您有一些疑問,請使用JavaScript調試工具(如FireBug或Chrome開發人員工具欄)檢查與請求一起發送的確切數據有效負載。