2010-03-06 31 views
5

Tôi hiện đang phát triển ứng dụng trong MVC2 Tôi muốn sử dụng thẻ biểu mẫu mutiple trong Đơn đăng ký của tôi Trong My View Tôi đã tạo một bảng có tùy chọn Xóa mà tôi đang thực hiện thông qua Đăng cho từng cá nhân Xóa vì vậy tôi có Tạo thẻ biểu mẫu cho mỗi nút. tôi cũng muốn người dùng cung cấp tùy chọn để xóa các bản ghi mutiple vì vậy tôi đang cung cấp cho họ với hộp kiểm. Biểu mẫu này sẽ có tất cả các giá trị của hộp kiểm và tất cả. nên hình thức được làm như nàyTôi có thể có một thẻ biểu mẫu bên trong Khác trong ASP.net MVC RC2

cho Mỗi nút delete

<form action="/Home/MutipleDelete" method="post"> 
<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;" /> 

<input id="chk1" name="chk1" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member1" /> 

    <input type="hidden" name="hfmem1" id="hfmem1" value="1" /> 

       </form> 
<input id="chk2" name="chk2" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member2" /> 

    <input type="hidden" name="hfmem2" id="hfmem2" value="2" /> 

       </form> 


      </form> 

Sau đây là không làm việc. Nhưng nếu tôi viết mã của tôi hình thức mà ám theo cách này

<form action="/Home/MutipleDelete" method="post"> 

<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;" /> 
</form> 
<input id="chk1" name="chk1" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member1" /> 

    <input type="hidden" name="hfmem1" id="hfmem1" value="1" /> 

       </form> 
<input id="chk2" name="chk2" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member2" /> 

    <input type="hidden" name="hfmem2" id="hfmem2" value="2" /> 

       </form> 

nó đang làm việc trong Mozilla nhưng không phải trong IE.I đã debug và giá trị Đã bắt đầu FormCollection Trong contoller.What phải làm gì.?

Trả lời

4

Làm tổ của forms is not allowed và có thể dẫn đến hành vi không xác định giữa các trình duyệt.

2

Về mặt khái niệm, biểu mẫu trong biểu mẫu không thực sự hợp lý. Bạn không thể sử dụng Liên kết Hành động thay cho các nút trên các biểu mẫu bên trong? Bạn vẫn có thể tạo kiểu cho chúng trông giống như các nút.

+0

nhưng sử dụng xóa với get Phương pháp không phải là một ý tưởng tốt cũng đề cập đến bởi Stephen Walther http://stephenwalther.com/blog/archive/2009/01 /21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx – coolguy97

+1

Ok, đó là một điểm công bằng. Trong trường hợp đó tôi nghĩ bạn cần đưa ra quyết định quan trọng nhất (ít có khả năng bị bỏ qua nếu Javascript bị tắt) chức năng: Xóa riêng lẻ hoặc Xóa lựa chọn. Sử dụng một (các) biểu mẫu cho một hình thức quan trọng nhất và sử dụng Ajax cho một hình thức khác. – pdr

5

Trong XHTML, biểu mẫu trong biểu mẫu không được phép và không thực sự có ý nghĩa.

Để thực hiện những gì bạn đang cố gắng làm, bạn nên sử dụng các liên kết/nút đơn giản trong bảng của mình. Ví dụ, chúng có thể gửi yêu cầu 'xóa' đến máy chủ của bạn và sau khi hoàn tất yêu cầu, cũng loại bỏ mục nhập khỏi giao diện người dùng bằng jQuery.

Ví dụ:

[Authorize] 
    [HttpPost] 
    public JsonResult Delete(Guid id) 
    { 
     // do stuff, delete the item 
     return Json(succeeded ? Id.ToString() : "error"); 
    } 

trong giao diện

<a href="#" onclick="$.post('/Stuff/Delete/' + id, function(data) { deleteCallback(data); }); return false;">delete</a> 

function deleteCallback(data) 
{ 
    if(data=="error"){ 
    /* error handler for UI */ 
    } 
    else { 
    /*remove the entry from the user interface*/ 
    } 
}; 

Nếu bạn muốn làm đa xóa, bạn không nên chuyển danh sách các ID để xóa bằng cách sử dụng URL (vì có một 2k giới hạn trong IE và có vẻ khó chịu), nhưng thay vì sử dụng cú pháp sau:

arrayVariable = new Array(); 
// fill array with ids associated to checked checkboxes' entries 
$.post('/Stuff/Delete/' + id, {'IdsToDelete' : arrayVariable }, function(data) { deleteCallback(data); }); return false;"> 

Điều này có thể được tự động đồng nhất được tuần tự hóa thành một danh sách .NET thực, vì vậy bạn sẽ phải lặp lại danh sách các số nguyên hoặc GUID, hoặc bất kỳ PK nào của bạn trông giống như thế!

CHỈNH SỬA: Điều này vẫn được đơn giản hóa một chút. Vì lý do bảo mật, bạn nên tự bảo vệ mình khỏi CSRF (Cross-Site Request Forgery). Darin cung cấp a great answer how to do that.

này sẽ thêm [ValidateAntiForgeryToken] phương pháp điều khiển của bạn và xem sẽ cần phải chứa một cái gì đó giống như

var token = $('input[name=__RequestVerificationToken]').val(); 
$.post("/YourUrl", { 'IdsToDelete' : arrayVar, '__RequestVerificationToken': token }, function(data) { deleteCallback(data); }); 
+0

cảm ơn cho cách khác ra nhưng làm thế nào tôi có thể đạt được xóa duy nhất và mutiple xóa trong một trang trong tình huống này cả bằng cách sử dụng bài. – coolguy97

+0

Để sử dụng đa xóa, tôi sẽ đặt hộp kiểm ở đó. Bạn có thể kiểm tra trạng thái hộp kiểm bằng cách sử dụng jquery và truyền danh sách các ID mà người dùng muốn xóa. Các liên kết xóa một lần duy nhất vẫn giữ nguyên. Tôi đã cập nhật bài đăng một chút. – mnemosyn

+0

Cảm ơn bạn đã trả lời nhưng tôi không muốn sử dụng ajax ở đó – coolguy97

0

Tại sao không chỉ cần sử dụng một hình thức duy nhất và sử dụng nhiều trình nút? Bạn cần phải giải thích một cách cẩn thận kết quả nhưng điều đó cho phép bạn làm điều đó mà không cần javascript và không cần phải làm html xoắn.

Bạn có thể cần đọc trực tiếp Request.Params nhưng điều đó tương đối dễ dàng để giải quyết.

<form action="<%= Html.Encode(Url.Action("Delete"))%>"> 
<ul> 
<li>Item 1 <input type="submit" id="<%= IDSafe(item_id) %>" name="<%= IDSafe(item_id2) %>" value="Delete" /></li> 
<li>Item 2 <input type="submit" id="<%= IDSafe(item_id2) %>" name="<%= IDSafe(item_id2) %>" value="Delete" /></li> 
</ul> 
<input type="submit" name="deleteall" value="Delete selected" /> 
</form> 
0

Tôi nghĩ rằng điều này sẽ không thể thực hiện được khi sử dụng bài đăng. Vì sử dụng bài đăng, chúng tôi có thể tìm thấy nút gửi nào được nhấp nhưng sẽ không thể tìm thấy giá trị của nút gửi nếu chúng tôi muốn hiển thị một số giá trị để hiển thị người dùng và giá trị khác mà chúng tôi muốn gửi tới cơ sở dữ liệu.

trong trường hợp này nút của tôi nộp được tạo động

<input type="submit" name="submitbutton" id="<%= Html.Encode(item.ideletevalue) %>" class="submitLink" value=" <%= Html.Encode(item.deleteitemname)%>"/> 
Các vấn đề liên quan