2011-08-12 14 views
-2

私が直接私のページ(mypage.aspx)にアクセスするたびに、それはエラーを返します:のQueryString検証問題

Object not set to object not set to an instance of an object.

私は(mypage.aspx SR =本当?)クエリ文字列を追加する場合、それは動作しますが、私がチェックしていますそれが値を持っていることを評価する前に、値を持たないようにしてください。では、ページに直接アクセスするとエラーが表示されるのはなぜですか?

if (!IsPostBack) 
{ 
    string qu1 = ""; 
    string qu2 = ""; 
    string qu3 = ""; 

    if (Request.QueryString["qu1"] != null) 
    { 
     qu1 = Request.QueryString["qu1"].ToString(); 
     if (qu1 != "") 
     { 
      qu1DropDownList.SelectedValue = industry; 
     } 
    } 

    if (Request.QueryString["qu2"] != null) 
    { 
     qu2 = Request.QueryString["qu2"].ToString(); 
     if (qu2 != "") 
     { 
      qu2DropDownList.SelectedValue = category; 
     } 
    } 

    fillDropDownList(); 

    if (Request.QueryString["qu3"] != null) 
    { 
     qu3 = Request.QueryString["qu3"].ToString(); 
     if (qu3 != "") 
     { 
      qu3tDropDownList.SelectedValue = product; 
     } 
    } 
} 

string search = ""; 
string qu1value = IndustryDropDownList.SelectedValue; 
string qu2value = ProductCategoryDropDownList.SelectedValue; 
string qu3value = ProductDropDownList.SelectedValue; 

using (SPSite site = new SPSite("SITE")) 
using (SPWeb oWebsiteRoot = site.OpenWeb()) 
{ 
    SPList oList = oWebsiteRoot.Lists["SpacesInfo"]; 
    SPListItemCollection items = null; 

    if (Request.QueryString["sr"] != "" && Request.QueryString["sr"] != null) 
    { 
     search = Request.QueryString["sr"].ToString(); 
     if (search == "true") 
     { 
      if (indvalue == "select" & catvalue == "select") 
      { 
       items = oList.Items; 
      } 
      else if (indvalue != "select" & catvalue != "select" & provalue != "select") 
      { 
       SPQuery query = new SPQuery(); 
       query.Query = "MYQUERY"; 
       items = oList.GetItems(query); 
      } 
      else if (indvalue != "select" & catvalue != "select" & provalue == "select") 
      { 
       SPQuery query = new SPQuery(); 
       query.Query = "MYQUERY"; 
       items = oList.GetItems(query); 

      } 
      else if (indvalue != "select" & catvalue == "select") 
      { 
       SPQuery query = new SPQuery(); 
       query.Query = "<Where><Eq><FieldRef Name='Industry' /><Value Type='Choice'>" + indvalue + 
        "</Value></Eq></Where>"; 
       items = oList.GetItems(query); 
      } 
      else if (indvalue == "select" & catvalue != "select" & provalue == "select") 
      { 
       SPQuery query = new SPQuery(); 
       query.Query = "MYQUERY"; 
       items = oList.GetItems(query); 
      } 
      else if (indvalue == "select" & catvalue != "select" & provalue != "select") 
      { 
       SPQuery query = new SPQuery(); 
       query.Query = "MYQUERY"; 
       items = oList.GetItems(query); 
      } 
      else 
      { 
       errorLabel.Text = "Please contact the administrator."; 
       items = oList.Items; 
      } 
     } 
     else 
     { 
      items = oList.Items; 
     } 
    } 
    DataTable table = new System.Data.DataTable(); 
    table = items.GetDataTable(); 
    spacerepeater.DataSource = table; 
    spacerepeater.DataBind(); 
} 
+4

正確に例外が発生しますか。どの行? –

答えて

0

変更するには、この順序if文:

if (Request.QueryString["sr"] != "" && Request.QueryString["sr"] != null) 

if (Request.QueryString["sr"] != null && Request.QueryString["sr"] != "") 

あるべき問題はこれで、あなたのコードでは、空の文字列( "")を探し、オブジェクトがnullのため失敗します。私のバージョンでは、値がnullで、2番目をチェックせずにifステートメントから抜けることがわかります。

これは、しばしば短絡評価と呼ばれます。

REF http://en.wikipedia.org/wiki/Short-circuit_evaluation

+1

または単に 'if(!String.IsNullOrEmpty(Request.QueryString [" sr "]))' –

+3

この命令はどのように問題を引き起こすでしょうか? 'null'を空の文字列と比較すると、正常に動作します。 – BrokenGlass

+0

@BrokenGlass OPから報告されたように、エラー(左辺値)がスローされます。自分で試してみてください。 – Hogan

0

用途:

if (!String.IsNullOrEmpty(Request.QueryString["sr"])) 
{ 
    //Do stuff 
}