查询字符串不返回值的方法

时间:2014-12-08 12:42:03

标签: c# asp.net linq-to-sql

我通过查询字符串将一些值从一个页面传递到另一个页面,它正确传递值然后成功传递给存储过程但是再次输入Request.QueryString["something"]非常烦人,所以我创建了一个它的方法,但该方法不返回/传递任何值,并抛出null引用异常。

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        using (Property_dbDataContext context = new Property_dbDataContext())
        {
            _errMsg.Enabled = false;
            _errMsg.Visible = false;                    

            var find_prop = context.find_property(val("city"), val("type"), val("subtype"), val("bedrooms"), val("size_unit"), Convert.ToInt32(val("area_from")), Convert.ToInt32(val("areato")), Convert.ToInt32(val("pricefrom")), Convert.ToInt32(val("priceto"))).ToList();
            //code above does not return any value

            //var find_prop = context.find_property(Request.QueryString["city"], Request.QueryString["type"], Request.QueryString["subtype"], Request.QueryString["bedrooms"], Request.QueryString["size_unit"], Convert.ToInt32(Request.QueryString["area_from"]), Convert.ToInt32(Request.QueryString["areato"]), Convert.ToInt32(Request.QueryString["pricefrom"]), Convert.ToInt32(Request.QueryString["priceto"])).ToList();  
           //code above return value from the database but its a long procedure

            rptr_properties.DataSource = find_prop;
            rptr_properties.DataBind();
        }
    }
    catch(Exception ex)
    {
        _errMsg.Enabled = true;
        _errMsg.Visible = true;
        _errMsg.Text = "Sorry! Property not found." + ex;
    }
}

public string val(string a)
{
    return Request.QueryString["" + a + ""].ToString();
}

3 个答案:

答案 0 :(得分:3)

在尝试访问该项目之前,您需要确保该项目存在:

public string val(string a)
{
    if(Request.QueryString[a] != null)
       return Request.QueryString[a].ToString();

    return string.Empty;
}

参考你的评论;特别是:

Convert.ToInt32(val("area_from"))

是否会导致问题,因为默认值为空字符串。

这样的事情现在应该适用:

public string ValToString(string a)
{
    if(Request.QueryString[a] != null)
       return Request.QueryString[a].ToString();

    return string.Empty;
}

public int ValToInt32(string a)
{
    if(Request.QueryString[a] != null)
       return Convert.ToInt32(Request.QueryString[a]);

    return 0;
}

然后您可以修改查找代码:

var find_prop = context.find_property(ValToString("city"), ValToString("type"), ValToString("subtype"), ValToString("bedrooms"), ValToString("size_unit"), Convert.ToInt32(val("area_from")), Convert.ToInt32(val("areato")), ValToInt32("pricefrom"), ValToInt32("priceto")).ToList();

答案 1 :(得分:1)

    This will work
    public string val(string a)
    {
        return Request.QueryString[a];
    }

答案 2 :(得分:0)

将查询字符串值转换为int(32)的更好方法:

public int GetIntFromQueryString(string key)
{
    int result = int.MinValue;
    if(Request.QueryString[key] != null)
    {
        int.TryParse(Request.QueryString[key].ToString(), out result);
    }
    return result;
}

如果TryParse无法转换该值,则该方法将返回'int.MinValue',然后您可以检查返回的值是否等于'int.MinValue'并从那里开始。