Tôi biết rằng XHTML không hỗ trợ các thẻ biểu mẫu lồng nhau và tôi đã đọc các câu trả lời khác ở đây trên Stack Overflow liên quan đến chủ đề này, nhưng tôi vẫn chưa tìm ra một giải pháp tao nhã cho vấn đề này.
Một số người nói rằng bạn không cần nó và họ không thể nghĩ ra một kịch bản là điều này sẽ cần thiết. Chà, cá nhân tôi không thể nghĩ ra một kịch bản mà tôi không cần nó.
Hãy xem một ví dụ rất đơn giản:
Bạn đang tạo một ứng dụng blog và bạn có một biểu mẫu với một số trường để tạo một bài đăng mới và một thanh công cụ với các "hành động" như "Lưu", "Xóa", "Hủy".
<form
action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"
method="post">
<input type="text" name="foo" /> <!-- several of those here -->
<div id="toolbar">
<input type="submit" name="save" value="Save" />
<input type="submit" name="delete" value="Delete" />
<a href="/home/index">Cancel</a>
</div>
</form>
Mục tiêu của chúng tôi là viết biểu mẫu theo cách không yêu cầu JavaScript , chỉ đơn giản là biểu mẫu HTML cũ và gửi các nút.
Vì URL hành động được xác định trong thẻ Biểu mẫu chứ không phải trong mỗi nút gửi riêng lẻ, nên tùy chọn duy nhất của chúng tôi là đăng lên một URL chung và sau đó bắt đầu "nếu ... sau đó ... khác" để xác định tên của nút đó đã được gửi. Không thanh lịch lắm, nhưng là lựa chọn duy nhất của chúng tôi, vì chúng tôi không muốn dựa vào JavaScript.
Vấn đề duy nhất là nhấn "Xóa", sẽ gửi TẤT CẢ các trường biểu mẫu trên máy chủ mặc dù điều duy nhất cần thiết cho hành động này là đầu vào Ẩn với id sau. Trong ví dụ nhỏ này không phải là vấn đề lớn, nhưng tôi có các biểu mẫu với hàng trăm trường (có thể nói) trong các ứng dụng LOB của mình mà (vì yêu cầu) phải gửi mọi thứ một lần và trong mọi trường hợp điều này có vẻ rất không hiệu quả và một sự lãng phí Nếu lồng nhau của biểu mẫu được hỗ trợ, ít nhất tôi sẽ có thể bọc nút gửi "Xóa" bên trong biểu mẫu của chính nó chỉ bằng trường post-id.
Bạn có thể nói "Chỉ cần thực hiện" Xóa "dưới dạng liên kết thay vì gửi". Điều này sẽ sai ở rất nhiều cấp độ, nhưng quan trọng nhất là vì các hành động hiệu ứng phụ như "Xóa" ở đây, không bao giờ nên là một yêu cầu NHẬN.
Vì vậy, câu hỏi của tôi (đặc biệt với những người nói rằng họ không cần thiết phải làm tổ) là BẠN làm gì? Có bất kỳ giải pháp tao nhã nào mà tôi đang thiếu hoặc điểm mấu chốt thực sự là "Hoặc yêu cầu JavaScript hoặc gửi mọi thứ"?