Tôi đang sử dụng phiên bản cũ hơn của ASP.NET AJAX do giới hạn thời gian chạy, Đặt Trình xác thực ASP.NET bên trong bảng cập nhật không hoạt động. Có một thủ thuật để làm cho những công việc này, hoặc tôi cần phải sử dụng kiểm soát ValidatorCallOut đi kèm với bộ công cụ AJAX?ASP.NET Validators bên trong UpdatePanel
Trả lời
Tôi nghi ngờ bạn đang chạy bản phát hành gốc (RTM) của .NET 2.0.
Cho đến khi kiểm soát trình xác thực năm 2007 không tương thích với UpdatePanels. Điều này đã được giải quyết với SP1 của .NET Framework.
Nguồn của sự cố là UpdatePanel có thể phát hiện các thay đổi đánh dấu trong trang của bạn, nhưng không có cách nào để theo dõi tập lệnh chính xác. Trình xác thực dựa nhiều vào tập lệnh. Trong quá trình postback một phần, các tập lệnh được thổi bay đi, không được cập nhật hoặc không chạy khi chúng được định nghĩa.
Trong bản beta đầu tiên, MS có UpdatePanel cố gắng đoán những tập lệnh nào cần được hiển thị lại hoặc chạy. Nó không hoạt động tốt lắm, và họ phải lấy nó ra.
Để giải quyết vấn đề trước mắt, Microsoft đã phát hành phiên bản vá lỗi của các lớp trình xác nhận hợp lệ trong một DLL mới có tên Validators.DLL và đưa ra hướng dẫn về cách sử dụng ASP.NET để sử dụng các lớp đó thay vì các lớp thực. Nếu bạn Google cho rằng tên DLL, bạn nên tìm thêm thông tin. Xem thêm This blog post.
Đây là biện pháp ngăn chặn và bạn nên
không sử dụng số
tránh nếu có thể.
Giải pháp thực sự cho sự cố xảy ra ngay sau đó, trong .NET 2.0 SP1. Microsoft đã giới thiệu một cơ chế mới để đăng ký các kịch bản lệnh trong SP1 và thay đổi các lớp trình xác nhận hợp lệ thực sự để sử dụng cơ chế đó thay vì cơ chế cũ hơn.
Hãy để tôi cung cấp cho bạn một số chi tiết về những thay đổi:
Theo truyền thống, bạn đã dự định đăng ký kịch bản thông qua phương pháp trang như Page.RegisterStartupScript() và Page.RegisterClientScriptBlock(). Vấn đề là các phương thức này không được thiết kế cho khả năng mở rộng và UpdatePanel không có cách nào để giám sát các cuộc gọi đó.
Trong SP1, có một đối tượng thuộc tính mới trên trang gọi là Page.ClientScripts. Đối tượng này có các phương thức để đăng ký các kịch bản lệnh tương đương (và theo cách nào đó tốt hơn) cho các kịch bản gốc. Ngoài ra, UpdatePanel có thể giám sát các cuộc gọi này, để nó hiển thị lại hoặc gọi các phương thức khi thích hợp. Các phương thức RegisterStartupScript(), vv cũ hơn đã không được chấp nhận. Họ vẫn làm việc, nhưng không phải bên trong UpdatePanel.
Không có lý do nào (ngoài chính trị, tôi giả sử) không cập nhật cài đặt của bạn lên .NET 2.0 SP1. Gói dịch vụ thực hiện các bản sửa lỗi quan trọng.
Chúc may mắn.
@jmein
Trên thực tế vấn đề là kịch bản Validator của khách hàng không làm việc khi được đặt bên trong một UpdatePanel (UpdatePanels làm mới sử dụng .innerHTML, có thêm các nút kịch bản như các nút văn bản, không hạch kịch bản, vì vậy trình duyệt không chạy chúng).
Bản sửa lỗi là bản vá được phát hành bởi microsoft để khắc phục vấn đề này. Tôi tìm thấy nó với sự giúp đỡ của Google.
http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx
@Jonathan Hà Lan: Điều gì là sai khi sử dụng Validators.dll?
Vì chúng thay thế lớp gốc, bạn lặng lẽ bỏ qua mọi lỗi và sửa lỗi bảo mật, cải tiến, v.v. mà Microsoft có thể phát hành trong tương lai (hoặc có thể đã được phát hành). Trừ khi bạn nhìn kỹ vào web.config, bạn có thể không bao giờ nhận thấy rằng bạn đang bỏ qua các bản vá lỗi.
Tất nhiên, bạn phải đánh giá từng tình huống. Nếu bạn hoàn toàn bị mắc kẹt bằng cách sử dụng .NET 2.0 RTM, thì Validators.dll là tốt hơn không có gì.
Nếu vì những gì bao giờ lý do bạn không thể sử dụng phiên bản udpated của các điều khiển ASP.NET validator thực sự là rất dễ dàng để xác nhận một nhóm xác nhận chính mình, tất cả các bạn cần làm là gọi
Page_ClientValidate("validationGroupName");
Sau đó, bạn có thể sử dụng PageRequestManager thực hiện xác nhận khi bạn cần.
Chắc chắn bằng cách sử dụng các điều khiển xác thực được cập nhật là cách để đi, nhưng tôi khá một phần để JavaScript;)
- 1. jquery ui datepicker bên trong asp.net UpdatePanel
- 2. ASP.Net - Javascript bên trong AJAX UpdatePanel
- 3. Phân trang ASP.net Gridview không hoạt động bên trong UpdatePanel
- 4. FileUpload.PostedFile luôn luôn rỗng bên trong UpdatePanel
- 5. Sử dụng GridView bên trong UpdatePanel
- 6. ASP.NET updatepanel bên trong bảng điều khiển ẩn có thể lỗi
- 7. ASP.NET UpdatePanel lỗi tham khảo thư viện
- 8. Làm mới điều khiển lặp lại trong UpdatePanel với ASP.NET
- 9. Validators, xác nhận mật khẩu
- 10. Full postback được kích hoạt bởi LinkButton bên trong GridView bên trong UpdatePanel
- 11. UpdatePanel Slowness trong IE
- 12. FluentValidation, Validators lifecycle và sử dụng Validators để kiểm tra Db
- 13. UpdatePanel là gì?
- 14. Trang mất tiêu đề sau UpdatePanel asyncpostback
- 15. jQuery Dialog 'Đóng' mâu thuẫn với ASP.NET UpdatePanel
- 16. Bạn sử dụng UpdatePanel như thế nào? (asp.net)
- 17. Giải pháp thay thế tốt nhất cho ASP.NET AJAX UpdatePanel
- 18. DropDownList trong UpdatePanel
- 19. UpdatePanel Exception Handling
- 20. Response.Write và UpdatePanel
- 21. UpdatePanel, Repeater, DataBinding Problem
- 22. Làm thế nào tôi có thể thêm một lớp css vào một updatepanel trong ASP.Net?
- 23. Thêm điều khiển tự động để một UpdatePanel trong ASP.NET AJAX
- 24. Điều khiển FileUpload bên trong UpdatePanel mà không làm mới toàn bộ trang?
- 25. Sự cố với hộp văn bản bên trong updatepanel - không gây ra sự kiện OnTextChanged
- 26. Điều khiển máy chủ tùy chỉnh gây ra toàn bộ postbacks bên trong UpdatePanel
- 27. ScriptManager.RegisterClientScriptInclude không hoạt động trong UpdatePanel
- 28. Làm thế nào để Unit Test dữ liệu Chú Validators
- 29. Nested UpdatePanel Triggers
- 30. jQuery AJAX vs UpdatePanel
Cảm ơn! Một trong các máy chủ của tôi đã hiển thị hành vi này và thực tế, nó thiếu sp1. – edosoft