6

我的页面上有包含以下代码的表单

<form class="form">
    ... bunch of inputs and presentation logic...
    <div>
        <input type="submit" class="btn btn-primary" id="submit_btn" value="Save Part"/>
        <a class="btn" href="/Part/CopyPart/?id=@Model.ID ">Copy Part</a>
        <a class="btn" href="/Part/Delete/?id=@Model.ID">Delete Part</a>
        <a class="btn" href="/Part/PartList/?selectedType=@Model.PartType">Return To Part List</a>
    </div>
    @Html.HiddenFor(model => model.ID)
    @Html.HiddenFor(model => model.Manufacturer)
    @Html.HiddenFor(model => model.DateCreated)
    @Html.HiddenFor(model => model.Manufacturer)
    @Html.HiddenFor(model => model.IsActive)
    @Html.HiddenFor(model => model.PartType)
</form>

我正在尝试使用 pjax() 提交此表单并刷新包含一些结果。我的js代码如下。

$(function() {
    $('a').pjax({ container: "#update_panel", timeout: 2000 }).live('click', function() {});
    $("#submit_btn").click(function() {
        var form = $('#form');
        $.pjax({
            container: "#update_panel", 
            timeout: 2000,
            url: "@Url.Action("UpdatePart","Part")",
            data: form.serialize()
        });
    });
});

此代码提交调用我的 UpdatePart() 操作,但它将空模型传递给操作?如何使用表单内容填充模型以便一切正常?

4

3 回答 3

8

我在他们的文档中看到:https ://github.com/defunkt/jquery-pjax 他们有一个简单的方法来做到这一点:

<div id="pjax-container">
</div>

<form id="myform" pjax-container>
 ... all inputs/submit/buttons etc ....
</form>

<script>
$(document).on('submit', 'form[pjax-container]', function(event) {
  $.pjax.submit(event, '#pjax-container')
})
</script>

我个人之前没有看到这个例子......也许它是新的/不是......但希望它对其他人有所帮助。

于 2015-02-24T19:06:50.840 回答
4

您正在使用 Id 引用表单,但该表单有一个类并且没有 id。尝试:

var form = $(".form");

或者

<form id="form">
于 2012-03-08T17:14:41.560 回答
3

确保通过单击处理程序返回 false 来取消表单的默认提交:

$("#submit_btn").click(function() {
    var form = $('#form');
    $.pjax({
        container: "#update_panel", 
        timeout: 2000,
        url: "@Url.Action("UpdatePart","Part")",
        data: form.serialize()
    });

    return false; // <-- cancel the default event
});
于 2012-03-08T17:06:53.043 回答