2012-10-01 59 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开发人员工具栏)检查与请求一起发送的确切数据有效负载。