2010-04-08 35 views
15

Tôi đang gặp một số khó khăn với Ajax.BeginFormasp.net MVC Ajax.BeginForm

Tôi có một cái gì đó như thế này trong một cái nhìn

<% using (Ajax.BeginForm("ActionName", null , null, new { id = "FormName" })) 
    {%> 
     <input type="hidden" value = '<%= Html.Encode(Model.id) %>' name="id"/> 
     <textarea id="message" name=message rows="4" style="width: 90%"> 
     </textarea> 
    <% }%} 

Và phương pháp hành động là một cái gì đó giống như

này
[AcceptVerbs(HttpVerbs.Post)] 
    [Authorize] 
    public ActionResult ActionName(int id, string message) 
    { 
    .... 
    } 

Tôi đang cố chuyển 'id' và 'message' sang phương thức hành động. Tôi đang đi qua 'null' cho routeValues ​​nhưng tôi không biết những gì để vượt qua. Lý tưởng nhất là tôi đã cố gắng để tìm một tình trạng quá tải mà không yêu cầu giá trị tuyến đường nhưng đã actionName và htmlattributes (cho tên mẫu) nhưng tôi không thể tìm thấy một. Tôi không muốn thêm 'tin nhắn' để xem-mô hình và tôi cần FormName trong đó cho các hoạt động jquery. Cách tốt nhất để giải quyết vấn đề này là gì?

Ồ, tôi quên đề cập đến, Đây là cách tôi gửi dưới dạng

$.post($("#FormName").attr('action'), $("#FormName").serialize(), 
           function(result) { 
            $("#correspondingDiv").html(result); 
           } 
          ); 

Trả lời

29

Sử dụng quá tải này: http://msdn.microsoft.com/en-us/library/dd470605.aspx

Ajax.BeginForm(
    string "ActionName", 
    string "ControllerName", 
    new routevalues {id="IDValue",message="MyMessage"}, 
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] }, 
    new { id = "FormName" } 
) 
+0

Khi tôi thử giải pháp này, phương thức hành động của bộ điều khiển được gọi nhưng nó vẫn có các giá trị tuyến đường ban đầu được định nghĩa trong BeginForm và không phải là các giá trị được điền trong biểu mẫu. Có suy nghĩ gì không? –

+1

Không có cách nào bằng cách sử dụng Ajax.BeginForm để điền các giá trị từ biểu mẫu của bạn, bởi vì trình trợ giúp BeginForm được gọi khi trang được hiển thị. Bạn có thể nhận được các giá trị của các trường biểu mẫu bằng cách sử dụng Request.Form. –

0

Hãy thử:

<% using (Ajax.BeginForm("ActionName", null)) 
    {%> 
     <input type="hidden" value = '<%= Html.Encode(Model.id) %>' name="id"/> 
     <textarea id="message" name=message rows="4" style="width: 90%"> 
     </textarea> 
    <% }%} 

Tôi nghĩ rằng bạn đang quá phức tạp thêm vấn đề này, ID và tin nhắn sẽ nhận được cư trú trên postback từ các trường trong biểu mẫu, do đó bạn không cần phải xác định chúng trong khai báo biểu mẫu. Thay vào đó, bạn cũng có thể thử dùng thử số Html.BeginForm() trừ khi bạn thực sự muốn có phản hồi Ajax.

+1

tôi làm cần đáp ứng Ajax và tôi cũng nói rằng tôi cần phải đề cập đến FormName trong Ajax.BeginForm như tôi có nhiều hình thức trong trang. –

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