2009-10-01 21 views
21

Tôi đã sử dụng sau trong web.configmục đích cho <trang enableEventValidation = "false">

<pages enableEventValidation="false"> 

này sửa chữa một vấn đề chúng tôi đã có với Ajax.

Chúng tôi có một trang web nếu bạn duyệt trực tiếp bằng siêu liên kết HTML tiêu chuẩn sẽ hoạt động tốt.

Nếu bạn duyệt đến trang từ một trang khác thông qua liên kết bên trong một khung nhìn GridView và response.redirecting trong sự kiện RowCommand đến trang chuyển một ID trong chuỗi truy vấn. Trang sẽ phát các lỗi từ các điều khiển bên trong bảng điều khiển nêu rõ số

"Đối số trả về hoặc trả về không hợp lệ. Xác thực sự kiện được bật trong cấu hình hoặc <% @ Page EnableEventValidation =" true "%> trong một trang. xác minh rằng các đối số cho các sự kiện postback hoặc gọi lại bắt nguồn từ điều khiển máy chủ ban đầu được hiển thị. Nếu dữ liệu hợp lệ và được mong đợi, hãy sử dụng phương thức ClientScriptManager.RegisterForEventValidation để đăng ký dữ liệu đăng lại hoặc gọi lại để xác thực. "

I rất vui khi rời khỏi trang xác thực là sai vì dường như không có hiệu ứng nào khác.

Bất kỳ ý tưởng gì đang xảy ra?

+0

Tôi đã tìm thấy [câu trả lời này] (http://stackoverflow.com/a/9104931/1178314) về câu hỏi lừa đảo khá tốt và thiếu ở đây. –

Trả lời

12

Đọc số documentation.

CHỈNH SỬA: Vì lý do bảo mật, tốt nhất bạn nên đặt nó thành true bất cứ nơi nào bạn có thể.

Do đó, tôi khuyên bạn nên đặt thành false chỉ trên các trang AJAX riêng lẻ, nơi nó gây ra sự cố, trong khi vẫn để nó đúng trong web.config.

+1

Tôi đã đọc tất nhiên nhưng tôi thấy lời giải thích hạn chế chỉ khiến tôi tin rằng tôi sẽ không gặp vấn đề gì khi đặt sai mục đích, trừ khi ai đó cố tình gây độc hại, nó không gợi ý rằng các trang còn lại sẽ hoạt động khác . Từ đó tôi cho rằng nó là an toàn cho tôi để nó như là sai. Ứng dụng trên mạng nội bộ và tôi không sợ các cuộc tấn công nguy hiểm. – Robert

+0

Sau một ít nghiên cứu nữa tôi sẽ thực hiện với EDIT được đề xuất. Nó làm cho tinh thần cho các ứng dụng và bây giờ nó đang hát ngọt ngào một lần nữa, tất cả ajaxed lên. – Robert

+0

Sau đó, bạn có thể loại bỏ downvote của bạn? – SLaks

6

Từ here

không hợp lệ PostBack hoặc lỗi lập luận CallBack về cơ bản là nâng cao vì tính năng tổ chức sự kiện Validation. Tính năng EventValidation là một tính năng mới trong ASP.NET 2.0 và cung cấp một mức kiểm tra bổ sung để xác minh rằng một postback từ một điều khiển trên máy khách thực sự là từ điều khiển đó chứ không phải từ một người nào đó độc hại. để thử và thao túng mọi thứ. Nó là một phần trong chiến lược tổng thể của chúng tôi về việc tăng cường bảo mật ở mức độ sâu cho mô hình lập trình - để các nhà phát triển có thể được bảo mật theo mặc định ngay cả khi họ quên thêm các kiểm tra bảo mật của riêng họ.

Bây giờ, không hợp lệ PostBack hoặc đối số CallBack lỗi có thể xảy ra khi bạn đang bắn kiện click và đối tượng là rebinding hoặc thuộc tính của nó được thay đổi trong sự kiện Page_Load hoặc ai đó đang cố gắng đột nhập vào hệ thống của bạn với site scripting chéo. Mỗi lần .Net Framework hiển thị một trang thì nó kết hợp một Hướng dẫn duy nhất cho tất cả các điều khiển. Khi ràng buộc một GridView hoặc lặp lại, trên mỗi khung databind sẽ kết hợp một guid mới cho contorl. Vì vậy, mỗi khi bạn đang bắn sự kiện chắc chắn rằng sự kiện Page_Load không thay đổi kiểm soát, bởi vì nếu kiểm soát thay đổi nó sẽ có một Guid khác nhau mà đã acutally bắn sự kiện cho postback. Đây là một số tình huống với lỗi này.

1) Đối số trả về hoặc gọi lại không hợp lệ trong GridView Sự cố có thể là: Bạn đang ràng buộc dữ liệu trong sự kiện Page_Load với Nguồn dữ liệu đối tượng hoặc Gắn kết thủ công với hàm gọi. Điều này sẽ làm cho dữ liệu liên kết GridView của bạn trên mọi sự kiện lửa của bất kỳ điều khiển nào.Khi bạn đang bắn bất kỳ lệnh GridView nào với OnRowCommand, trước khi RowCommand kích hoạt GridView của bạn sẽ rebind và tất cả điều khiển bên trong nó sẽ được gán cho id mới. Vì vậy, RowCommand không thể lấy được vật phẩm đã kích hoạt sự kiện này. Giải pháp cho không hợp lệ Postback hoặc đối số gọi lại trong GridView: Bạn có thể ràng buộc dữ liệu của bạn trong này nếu điều kiện

if (!IsPostBack) 

    { 

      //Your code for Bind data 

    } 

Mã này chắc chắn sẽ cung cấp cho bạn giải pháp nếu điều này không làm việc sau đó kiểm tra xem có bất kỳ kiểm soát khác không đưa ra lỗi.

+0

Cảm ơn bạn đã nhập vào tôi đã đọc về điều này nhưng nỗ lực để tỷ lệ kết quả không phải là một tốt;) Cảm ơn – Robert

3

Có một điều đáng thêm ở đây: Nếu bạn muốn vô hiệu hóa xác nhận sự kiện cho một điều khiển cụ thể, chứ không phải là toàn bộ trang, có một cách giải quyết tài liệu herehere (và bây giờ tham chiếu trong relevant Connect suggestion):

Chỉ cần phân lớp lớp WebControl liên quan và không đặt thuộc tính SupportsEventValidation trên lớp con. Lớp con sẽ được miễn kiểm tra sự kiện.

+0

Upvote cho các liên kết để giải thích rõ ràng :) –

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