2010-06-25 16 views
8

Ok vì vậy tôi muốn biết làm thế nàocách sử dụng HtmlHelper.BeginForm() hoạt động?

<% using (Html.BeginForm()) { %> 
    <input type="text" name="id"/> 
<% } %> 

sản xuất

<form> 
    <input type="text" name="id"/> 
</form> 

cụ thể là như thế nào thêm </form> ở cuối? Tôi nhìn vào codeplex và không tìm thấy nó trong htmlhelper. Có một phương pháp EndForm, nhưng làm thế nào để biết ở trên để gọi nó?

Lý do là tôi muốn tạo phần mở rộng htmlhelper, nhưng không biết cách đóng khi kết thúc sử dụng.

Bất kỳ trợ giúp sẽ được đánh giá cao :)

Trả lời

16

BeginForm trả về một IDisposable trong đó kêu gọi EndForm trong Dispose.

Khi bạn viết using(Html.BeginForm()) { ... }, trình biên dịch sẽ tạo ra một khối finally mà các cuộc gọi Dispose, nó sẽ gọi EndForm và đóng thẻ <form>.

Bạn có thể sao chép hiệu ứng này bằng cách viết lớp của riêng bạn thực hiện IDisposable.

+0

nhanh chóng đáng kinh ngạc, nên có suy nghĩ về điều đó! Tôi không thể đánh dấu điều này là đã trả lời trong 8 phút :) – Jose

+2

+1, nhưng vì lợi ích của người đi bộ, 'EndForm()' gọi kỹ thuật 'Dispose()' (viết ra ' '), không phải nghịch đảo;) –

1

Giống như SLaks đã nói, nó tạo ra một khối cuối cùng gọi EndForm gọi phương thức Dispose trên giao diện IDisposable mà đối tượng .BeginForm() trả về.

BeginForm sử dụng Rseponse.Write để viết HTML cho câu trả lời.

EndForm ghi thẻ đóng vào Câu trả lời. Như vậy bất cứ điều gì xảy ra ở giữa hàm khởi tạo được trả về từ BeginForm và phương thức Vứt bỏ sẽ được ghi vào phản hồi đúng giữa các thẻ biểu mẫu.

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