Проблема проверки QueryString - PullRequest
0 голосов
/ 12 августа 2011

Каждый раз, когда я обращаюсь к своей странице напрямую (mypage.aspx), она возвращает ошибку:

Объект не установлен на объект, не установлен на экземпляр объекта.

Если я добавляю строку запроса (mypage.aspx? Sr = true), это работает, но я проверяю, чтобы убедиться, что перед тем, как он оценит, что оно имеет значение, и оно не должно иметь значение.Итак, почему я получаю сообщение об ошибке при прямом доступе к странице?

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();
}

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Использование:

if (!String.IsNullOrEmpty(Request.QueryString["sr"]))
{
   //Do stuff
}
0 голосов
/ 12 августа 2011

Измените порядок этого оператора if:

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

должно быть

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

Проблема в том, что в вашем коде он ищет пустую строку ("") ине удается, потому что объект является нулевым.В моей версии он увидит, что значение равно нулю и выйдет из оператора if без проверки второго.

Это часто называют оценкой короткого замыкания.

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

...