2009-01-21 38 views
6

Tôi muốn tự động thêm các trường vào một biểu mẫu ASP.NET MVC với JQuery.ASP.NET MVC & JQuery Dynamic Form Content

Ví dụ:

<script language="javascript" type="text/javascript"> 
    var widgets; 

    $(document).ready(function() { 
     widgets = 0; 
     AddWidget(); 
    }); 

    function AddWidget() { 
     $('#widgets').append("<li><input type='text' name='widget" + widgets + "'/></li>"); 
     widgets++; 
    } 
</script> 

<ul id="widgets"> 
</ul> 

này hoạt động, nhưng tôi sẽ tự lặp các giá trị hình thức trong bộ điều khiển:

[AcceptVerbs("Post")] 
public ActionResult AddWidget(FormCollection form) 
{ 
    foreach (string s in form) 
    { 
     string t = form[s]; 
    } 

    return RedirectToAction("ActionName"); 
} 

Nhưng nó xảy ra với tôi khi tôi gửi cho người dùng trở lại Nhận Action trong Controller Tôi sẽ phải thiết lập FormData với các giá trị được nhập vào và sau đó lặp lại thêm các widget với <% scripting.

Cách tốt nhất để làm điều này trong bản phát hành hiện tại (5 Tôi tin) là gì?

Trả lời

4

Giải pháp của tôi có thể là một cái gì đó như thế này (pseudo-code):

<script language="javascript" type="text/javascript"> 
    var widgets; 

    $(document).ready(function() { 
     widgets = 0; 
     <% for each value in ViewData("WidgetValues") %> 
      AddWidget(<%= value %>); 
     <% next %> 
    }); 

    function AddWidget(value) { 
     $('#widgets').append("<li><input type='text' name='widget" + widgets + 
          "'>" + value + "</input></li>"); 
     widgets++; 
    } 
</script> 

<ul id="widgets"> 
</ul> 

Và trong bộ điều khiển:

[AcceptVerbs("Post")] 
public ActionResult AddWidget(FormCollection form) 
{ 
    dim collValues as new Collection; 
    foreach (string s in form) 
    { 
     string t = form[s]; 
     collValues.add(t) 
    } 
    ViewData("WidgetValues") = collValues; 
    return RedirectToAction("ActionName"); 
} 

Bạn có thể làm việc ra các chi tiết sau
(xin lỗi vì trộn VB với C#, tôi là một anh chàng VB)

0

tôi có thể bị thiếu điểm ở đây, nhưng, bạn có cần đăng dữ liệu trở lại bộ điều khiển thông qua hành động biểu mẫu không? tại sao không thực hiện cuộc gọi ajax bằng cách sử dụng jquery để đăng dữ liệu lên bộ điều khiển ... hoặc tốt hơn là một dịch vụ web? gửi dữ liệu không đồng bộ và không cần phải xây dựng lại chế độ xem với các giá trị dữ liệu được gửi.

Điều này hoạt động tốt nếu các giá trị đang được tiêu thụ và không bao giờ sử dụng lại, nếu bạn có kế hoạch lưu trữ dữ liệu và hiển thị xem, mô hình của bạn nên thực sự hỗ trợ cấu trúc dữ liệu. có thể là Dictionary<string, string> trên mô hình.

+0

Việc viết mã không thực sự chấp nhận được khi gửi dữ liệu biểu mẫu, ứng dụng phải làm suy giảm một cách duyên dáng mà không bật tính năng tạo tập lệnh. – blu

+4

@blu Ha? Bạn đang sử dụng javascript ở nơi đầu tiên để xây dựng các điều khiển; làm thế nào điều này sẽ làm suy giảm một cách duyên dáng với js bị vô hiệu hóa? – Aleris

+0

Vâng, bình luận của tôi không có ý nghĩa đối với câu trả lời này. – blu

0

Tôi không phải là một nhà phát triển ASP.net nhưng tôi biết từ PHP mà bạn có thể sử dụng các mảng như tên cho các lĩnh vực đầu vào

Ex:

<input type="text" name="widgets[]" /> 
<input type="text" name="widgets[]" /> 

Sau đó bạn có thể lặp qua bưu điện widget biến như thể nó là một mảng các giá trị.

Không rối tung xung quanh với các biến động lực được đặt tên, v.v.

0

Theo tôi hiểu được vấn đề là bảo toàn giá trị được đăng trong tiện ích con. Tôi thik bạn chỉ có thể hiển thị những widgest bạn sẽ không cư trú trên máy chủ trong khi hiển thị Xem.