2013-08-07 46 views

Trả lời

12

Kiểm tra xem nó có trống không. Có một vài cách khác nhau, nhưng một trong những tôi đã nhìn thấy thường xuyên hơn sử dụng nằm dọc theo dòng:

If Request("FieldName") <> "" Then 
'etc. 
End If 

tôi thường kiểm tra một cách rõ ràng những bộ sưu tập FormQueryString với một số biến thể của một trong những mã dưới đây nếu tôi có thể nhận được các biến từ một hay cách khác tùy thuộc vào bối cảnh:

Select Case True 
    Case Request.Form("FieldName") <> "" 
     'Run if the Form isn't empty 
    Case Request.QueryString("FieldName") <> "" 
     'Run if the QueryString isn't empty 
    Case Else 
     'Set a predefined default if they're both empty 
End Select 

hoặc một lồng nhau Nếu ... Sau đó:

If Request.Form("FieldName") <> "" Then 
    'Run if the Form isn't empty 
ElseIf Request.QueryString("FieldName") <> "" Then 
    'Run if the QueryString isn't empty 
Else 
    'Set a predefined default if they're both empty 
End If 

Nếu tôi biết chính xác bộ sưu tập đó đến từ đâu, tôi sẽ kiểm tra bộ sưu tập đó một cách cụ thể. Lý do là tôi muốn chắc chắn rằng nó đang kéo những gì tôi mong đợi từ nơi tôi mong đợi nó đến từ. Tôi không muốn ai đó ghi đè giá trị Form bằng cách gửi một số nội dung trong số QueryString khi tôi không mong đợi.

Từ MSDN:

Nếu biến nhất định không phải là một trong các trước lăm bộ sưu tập, các đối tượng yêu cầu trả EMPTY.

Tất cả các biến có thể được truy cập trực tiếp bằng cách gọi Yêu cầu (biến) mà không có tên bộ sưu tập.Trong trường hợp này, máy chủ Web tìm kiếm các bộ sưu tập theo trình tự sau:

  • QueryString
  • Mẫu
  • Cookies
  • ClientCertificate
  • ServerVariables

Nếu một biến với cùng tên tồn tại trong nhiều bộ sưu tập, đối tượng Yêu cầu trả về fi Ví dụ đầu tiên là đối tượng cuộc gặp gỡ.

Chúng tôi đặc biệt khuyên rằng khi đề cập đến các thành viên của bộ sưu tập , tên đầy đủ sẽ được sử dụng. Ví dụ: thay vì Yêu cầu. ("AUTH_USER") sử dụng Request.ServerVariables ("AUTH_USER"). Điều này cho phép máy chủ định vị mục nhanh hơn.

+0

JFTR: 'Khác nếu' (lưu ý không gian) sẽ là một điều kiện lồng nhau. 'ElseIf' thì không. –

+0

@AnsgarWiechers yeah ... ý định ban đầu của tôi là đi với một lồng nhau thực sự nếu, nhưng tôi đã bị phân tâm bởi một đồng nghiệp. : P – AnonJr

+2

Trường có thể tồn tại, nhưng giá trị chỉ có thể để trống. Phương pháp đúng là Tomalak bên dưới. – bvmobileapps

18
If Request("FieldName").Count > 0 Then 
    ... 
End If 

Hoặc, viết tắt là:

If Request("FieldName").Count Then 
    ... 
End If 

Bối cảnh:

  • Bộ sưu tập Request là kỳ diệu, trong chừng mực nó không ném ra một lỗi khi bạn cố gắng truy cập một khóa không phải là một phần của yêu cầu - nhưng .Count sẽ là 0 cho các khóa không tồn tại.
  • Trong một chuỗi truy vấn URL mã hóa đó là pháp lý để gửi phím mà không có một giá trị, như foo&bar&baz
  • Nó cũng quy phạm pháp luật để gửi cùng một chìa khóa nhiều lần, ví dụ: nhiều giá trị cho mỗi khoá, như foo=value1&foo=value2.

Do đó, cách đáng tin cậy để xác định xem một khóa có được gửi bởi khách hàng hay không là để đếm số lần khách hàng đã gửi.

Trường hợp đặc biệt của thử nghiệm này là kiểm tra xem có giá trị không trống cho khóa đó hay không (If Request("FieldName") > ""). Điều này có thể hoặc có thể không phải là những gì bạn muốn cuối cùng; chỉ cần lưu ý rằng hành vi cơ bản của chuỗi truy vấn rộng hơn điều đó.

+6

+1. Đây là phương pháp nên được sử dụng. –

0

Tôi thường kiểm tra giá trị của nút SUBMIT. Nếu nó được nhấp, giá trị của nó được đăng cùng với dữ liệu biểu mẫu. Vì vậy, ngay cả khi tất cả dữ liệu biểu mẫu của bạn trống, giá trị của nút gửi sẽ không được. Và nếu giá trị của nút gửi là trống, thì nó không được nhấp.

if request("btn_Submit") <> "" Then 
    response.write "form was submitted" 
end if 

Điều này khó khăn hơn nếu bạn đang sử dụng lệnh javascript form.submit(), trong trường hợp này tôi thường chọn trường ẩn.

0

Để kiểm tra xem các thông số đã có mặt (mà không quan tâm đến giá trị của nó) nó cũng có thể viết:

fieldValue = Request("FieldName") 
if Not IsEmpty(fieldValue) ... 

Một lợi thế hơn phương pháp Đếm trên là, bạn có thể kiểm tra các biến, mà không đề cập đến tên trường một lần nữa. Lợi thế khi thử nghiệm cho "" là nếu bạn vượt qua & FieldName mà không gán giá trị, kiểm tra cho "" sẽ mang lại giá trị đúng, nhưng IsEmpty trả về false.

Chỉnh sửa: Tắt tính năng này không đáng tin cậy trong IIS.

  1. Đối với các url với? Param một mình, hoặc? Param = & param2, IsEmpty (param) trả về false, nhưng
  2. Đối với các url với? Param & param2, IsEmpty (param) thật là thú vị trả về true .. .