2011-08-12 64 views
-2

每当我直接进入我的页面(mypage.aspx)它返回一个错误:(?mypage.aspx SR =真)如果我添加一个查询字符串查询字符串验证问题

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

它的工作原理,但我检查,确保在它评估它有一个值之前,它不应该有一个值。那么,为什么我直接访问页面时会出现错误?

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 (Request.QueryString["sr"] != "" && Request.QueryString["sr"] != null) 

应该

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

的问题是这样的,在你的代码看起来为空字符串( “”)和因对象为空而失败。在我的版本中,它会看到该值为空,并且无法检查第二个if语句。

这通常被称为短路评估。

裁判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 
}