2009-03-15 39 views
15

Đến từ một nền tảng PHP Tôi thích sử dụng các URL sạch để lấy dữ liệu từ một dịch vụ này sang dịch vụ khác.Làm cách nào để tắt chế độ xem của ViewState?

Tuy nhiên, trên một số dự án ASP.NET của tôi, tôi nhận được thông số ViewState khủng khiếp trong URL của mình.

Có cách nào để tắt tính năng này trên toàn cầu không?

Điều này có ảnh hưởng gì đối với ứng dụng ASP.NET của tôi?

Trả lời

34

Bạn có thể tắt ViewState cho toàn bộ trang web như thế này:

<system.web> 
<pages enableViewState="false" /> 

Điều đó nói rằng, bạn không nên nhận được nó trên url. ViewState là một lĩnh vực ẩn được gửi đến máy chủ với một postback (thường sử dụng bài). Nó giữ trạng thái của các điều khiển khi trang được hiển thị cho máy khách, gửi nó với mỗi lần postback. Nếu nó hoạt động cho các ứng dụng bạn có thể chuyển sang sử dụng bài thay vào đó (hình thức vấn đề là chắc chắn bằng cách sử dụng có được), nếu không có một cái nhìn vào câu trả lời của Jon.

Kiểm tra liên kết này để biết thêm thông tin về cách chế độ xem phù hợp với vòng đời asp.net: http://msdn.microsoft.com/en-us/library/ms972976.aspx.

4

Thêm phần này vào file web.config:

<Pages enableViewState="false"/> 
10

Tôi đã có similar question khi viết Reputation Tracker.

Tôi không biết làm thế nào bạn làm điều đó trên toàn cầu ngoài việc không bao giờ sử dụng biểu mẫu với số runat="server", điều này liên quan đến kỷ luật hơn là cài đặt. Cụ thể, nếu bạn có runat="server" đặt trên biểu mẫu tôi tin rằng bạn sẽ luôn nhận được thông số viewstate, ngay cả khi bạn đã tắt nó ở mọi nơi để bạn không nhận được bất kỳ giá trị nào. Đó là kinh nghiệm của tôi, dù sao đi nữa. Rõ ràng điều này giới hạn bạn một chút, nhưng tôi đã thấy rằng bằng cách sử dụng các điều khiển máy chủ HTML (thay vì điều khiển ASP.NET) cho các phần thích hợp của ASP.NET có thể làm cho cuộc sống dễ hiểu hơn rất nhiều.

+0

@TFD: Trong khi điều đó chắc chắn xảy ra đôi khi, tôi không tin rằng đó là trường hợp ở đây. Sử dụng các biểu mẫu với runat = "server" cùng với các hành động GET (thay vì POST) dẫn đến chính xác loại hành vi mà người hỏi không muốn. Câu trả lời của tôi không liên quan như thế nào? –

+0

@TFD Jon đã đúng, bạn có thể muốn kiểm tra các liên kết mà anh ấy đăng trước khi công khai như thế;) – eglasius

+1

GET có thể không phù hợp khi bạn thực sự muốn xem - nhưng nó rất hữu ích khi bạn * không * cần viewstate. Đặc biệt, việc đánh dấu một URL với các tham số GET sẽ dễ dàng hơn rất nhiều so với việc phân loại bài đăng trở lại viewstate :) –

3

Bạn có thể chuyển sang ASP.Net MVC. Từ những gì tôi hiểu nó không sử dụng ViewState.

2

Hãy nhớ lại, tuy nhiên, một số hành vi nhất định được mong đợi bởi hầu hết các nhà phát triển biểu mẫu web ASP.NET sẽ không hoạt động nếu không có ViewState. Mục đích của ViewState là cung cấp cho ảo giác rằng các thuộc tính trang và kiểm soát khác nhau tồn tại từ yêu cầu này đến yêu cầu tiếp theo. ViewState không chứa tất cả các thuộc tính điều khiển, chỉ những thuộc tính đã thay đổi. Ý tưởng là ViewState giữ lại các thuộc tính này khi chúng ở thời điểm biểu mẫu được hiển thị lần cuối.

Một ví dụ điển hình là sự kiện SelectedIndexChanged trên menu thả xuống (một trong đó không có bộ tự động khởi động lại). Điều này làm việc vì ViewState giữ lại chỉ mục trước đó và biểu mẫu đăng chỉ mục hiện tại và điều khiển so sánh hai chỉ mục để biết rằng chỉ mục đã chọn đã thay đổi. Đó là khi nó tăng sự kiện SelectedIndexChanged. Nếu không có ViewState, sự kiện đó sẽ không kích hoạt. Tương tự cho các sự kiện TextChanged, v.v.

Thiếu tình huống GET (mà tôi chưa bao giờ gặp phải), vấn đề lớn với ViewState là sử dụng nó khi không cần thiết. Điều khiển lưới của bạn không cần phải giữ lại các giá trị trước đó của tất cả các điều khiển trong tất cả các hàng của nó, do đó, không bật ViewState trên đó.

8

Tắt Chế độ xem theo mặc định bằng cách sử dụng phần tử <page> trong web.config. Sử dụng EnableViewState="true" trong chỉ thị @Page sẽ không còn hoạt động khi bạn vô hiệu hóa ViewState trong web.config. Nếu sau này bạn quyết định rằng bạn cần ViewState cho một trang cụ thể, bạn có thể bật lại chỉ cho trang đó bằng cách sử dụng phần tử <location>.

<configuration> 
    <system.web> 
    <pages enableViewState="false" /> 
    </system.web> 

    <location path="MyFolder/MyPage.aspx"> 
    <system.web> 
     <pages enableViewState="true" /> 
    </system.web> 
    </location> 
    <location path="Site.master"> 
    <system.web> 
     <pages enableViewState="true" /> 
    </system.web> 
    </location> 
</configuration> 

Bạn cần làm tương tự cho bất kỳ trang chính nào mà trang hỗ trợ ViewState của bạn sử dụng.

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