2011-07-19 20 views
5

Tôi có một trang với một CompareValidator vào nó:lỗi không liên tục với CompareValidator - bất động sản ValueToCompare là ""

<asp:textbox id="txtResponseDate" runat="server" /> 
<asp:requiredfieldvalidator id="rfvResponseDate" runat="server" 
         controltovalidate="txtResponseDate" 
         display="Dynamic" 
         errormessage="Date is required." 
         setfocusonerror="true"> 
        </asp:requiredfieldvalidator> 
<asp:comparevalidator id="cmvDate" runat="server" 
         controltovalidate="txtResponseDate" 
         display="Dynamic" 
         errormessage="Date must not be before today." 
         operator="GreaterThanEqual" 
         setfocusonerror="true" 
         type="Date"> 
        </asp:comparevalidator> 

Trong đoạn mã phía sau, chúng ta thiết lập thuộc tính ValueToCompare như vậy:

If Not IsPostBack Then 

    cmvDate.ValueToCompare = DateTime.Now.ToString("d") 

End If 

Không liên tục (chúng tôi không thể phân biệt mẫu), chúng tôi nhận được lỗi sau:

"Giá trị '' của thuộc tính ValueToCompare của 'cmvDate' không thể chuyển đổi thành loại 'Ngày'."

Với một chồng gọi của:

at System.Web.UI.WebControls.CompareValidator.ControlPropertiesValid() 
at System.Web.UI.WebControls.BaseValidator.get_PropertiesValid() 
at System.Web.UI.WebControls.BaseValidator.Validate() 
at System.Web.UI.Page.Validate() 
at System.Web.UI.Page.Validate(String validationGroup) 
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 

Suy nghĩ đầu tiên của tôi là một cái gì đó kỳ lạ với định dạng ngày, nhưng chúng ta đang sử dụng ngày Anh, lỗi cuối cùng là vào ngày 18 tháng 7, do đó ValueToCompare được thiết lập để 18/07/2011. Tôi đã thiết lập này bằng tay bằng cách sử dụng trình gỡ lỗi, và nó đã làm việc tốt. Bất kỳ ai có ý tưởng sáng sủa nào về việc tại sao điều này có thể xảy ra?

  1. Tôi đã kiểm tra mã - không có nơi nào khác đang được đặt.
  2. Sử dụng trình gỡ lỗi, tôi đã kiểm tra kỹ lúc đăng lại và như mong đợi, giá trị thuộc tính này được giữ lại.
+0

'CurrentCulture' của bạn là gì? – VMAtm

+0

Đã nhận được văn bản sau đó lỗi xảy ra? – VMAtm

+0

@VMAtm - Văn hóa của chúng tôi là ở Vương quốc Anh và không, chúng tôi không có văn bản. – Paddy

Trả lời

5

The value '' of the ValueToCompare property of 'cmvDate' cannot be converted to type 'Date'.

Thông báo lỗi này cho biết, rằng trong thời điểm tài sản xác nhận ValueToCompare của RangeValidator bạn thân (không phải là kiểm soát bạn đang xác nhận) không được thiết lập. Điều này có thể là nếu bạn đã viết dòng này:

If Not IsPostBack Then 
    cmvDate.ValueToCompare = DateTime.Now.ToString("d") 
End If 

không có trong sự kiện Page_Init.

  1. Di chuyển mã đặt ValueToCompare thành Init event, bằng cách xóa séc để đăng lại.
  2. Kiểm tra, giá trị của thuộc tính này trong khi kiểm tra dữ liệu (có thể là, bạn nên xóa séc cho Not IsPostBack).
  3. Đặt thuộc tính này trước khi kiểm tra được thực hiện.
+0

Không ai trong số này giải thích lý do tại sao tất cả điều này hoạt động phần lớn thời gian và chỉ không liên tục bị lỗi. – Paddy

+0

Bạn không cho biết mã của mình đang hoạt động đôi khi. Bạn đã không nói về thông tin gỡ lỗi - những gì 'valueToCompare' có validator của bạn. Tôi đã giải thích, khi mã của bạn * có thể * thất bại - trong thời điểm xác thực, nếu bạn không đặt 'valueToCompare'. – VMAtm

+0

Tôi đánh giá cao sự giúp đỡ, nhưng cầu xin sự khác biệt, đây là tất cả trong câu hỏi ban đầu. – Paddy

1

Bạn có gặp phải bất kỳ lỗi nào khác liên quan đến ViewState không? Giống như "Xác nhận MAC ViewState không thành công. Nếu ứng dụng này được lưu trữ bởi một trang Web hoặc cụm, đảm bảo rằng cấu hình <machineKey> chỉ định cùng một thuật toán validationKey và xác thực. AutoGenerate không thể được sử dụng trong cụm."?

Nếu có, vấn đề có thể liên quan đến một trong những điều được liệt kê trong số MS KB article: Intermittent Invalid Viewstate Error in ASP.NET Web pages này.

There are several conditions that may cause this issue. Each known condition is presented with a short explanation and a possible workaround.
Application Pool Recycling
Server Farms or Server Clusters
Form Posts
Proxy servers and Virus Scanners

Một điều có thể khác không được đề cập trong bài viết đó là kết nối chậm hoặc không đáng tin cậy cùng với sự thiếu kiên nhẫn của người dùng. Tôi đã làm việc trên một ứng dụng được lưu trữ ở Mỹ nhưng nhiều người dùng đến từ Ấn Độ. Chúng tôi nhận thấy tần suất lớn hơn nhiều của các loại lỗi liên quan đến ViewState liên tục này giữa những người dùng ở Ấn Độ. Chúng tôi đã suy đoán rằng có thể do độ trễ cao hơn, số lần nhảy cao hơn, băng thông thấp hơn và người dùng tương tác với các trang trước khi hoàn tất tải trang.

+0

Cảm ơn câu trả lời - chúng tôi làm việc trong một trang trại, nhưng chúng tôi đã thiết lập để phù hợp với các phím máy trên các trang web, và chúng tôi không nhận được các lỗi loại này nữa. Có thể điều này hoàn toàn có liên quan, nhưng điều kỳ lạ là chỉ có một trang trong ứng dụng mà hiện tại điều này đang xảy ra. – Paddy

2

Trong các thiết lập kiểm soát của bạn, bạn thiết lập type="Date" whitch có nghĩa là bạn sẽ so sánh giá trị như một đối tượng DateTime, nhưng trong ValueToCompare tài sản mà bạn thiết lập string đối tượng, không phải là một DateTime.

Nếu bạn cần phải so sánh bằng dây - thiết lập sự kiểm soát thiết type để String, Nếu bạn cần phải so sánh theo ngày - thiết DateTime đối tượng đến tài sản ValueToCompare kiểm soát và Operator="DataTypeCheck".

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