2012-03-08 13 views
5

Tôi có hình thức trên trang của mình có đoạn mã sausử dụng pjax phải gửi biểu mẫu

<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/[email protected] ">Copy Part</a> 
     <a class="btn" href="/Part/Delete/[email protected]">Delete Part</a> 
     <a class="btn" href="/Part/PartList/[email protected]">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> 

và tôi đang cố gắng sử dụng pjax() để nộp mẫu đơn này và làm mới chứa với một số kết quả. Mã js của tôi là như sau.

$(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() 
     }); 
    }); 
}); 

Mã này gọi hành động UpdatePart() của tôi nhưng chuyển mô hình trống cho hành động? Làm thế nào tôi có thể điền mô hình với nội dung biểu mẫu để nó hoạt động?

+0

'$ .fn.pjax' và' $ .pjax' là gì? –

+0

Nó là một thực thi trạng thái đẩy jquery. Nằm ở đây https://github.com/defunkt/jquery-pjax Nó là tuyệt vời để có được một url tốt và một ứng dụng đáp ứng, và đơn giản để sử dụng để khởi động. Vâng, tôi đoán ngoại trừ trong trường hợp này :) – PlTaylor

+0

Tôi ngạc nhiên là tôi đã không đi qua nó trước, nó trông rất tích cực. –

Trả lời

3

Bạn đang tham khảo hình thức sử dụng một Id, nhưng hình thức có một lớp và không có id. Hãy thử:

var form = $(".form"); 

hoặc

<form id="form"> 
+0

Cảm ơn. Tôi cần điều hiển nhiên chỉ ra cho tôi. – PlTaylor

3

Hãy chắc chắn rằng bạn hủy bỏ việc nộp hồ sơ mặc định của mẫu bằng cách trả lại sai từ xử lý nhấp chuột:

$("#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 
}); 
+0

Điểm tốt .... nhưng điều đó dường như không khắc phục được sự cố của tôi với mô hình trống được chuyển lại cho Hành động. – PlTaylor

+4

trả về false là điều sai trái để làm! bạn nên nắm bắt sự kiện và gọi 'preventDefault()' trên đó. Điều này a) giao tiếp tốt hơn ý định của bạn b) không phá vỡ sự kiện bubbling – WickyNilliams

5

tôi thấy trong tài liệu của họ: https://github.com/defunkt/jquery-pjax Rằng họ có một cách đơn giản để làm điều đó:

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

Cá nhân tôi không thấy ví dụ này trước đây .. có lẽ nó mới/không ... nhưng hy vọng nó sẽ giúp người khác.

Các vấn đề liên quan