繁体   English   中英

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

[英]Method for querystring not returning value

我正在通过查询字符串将某个值从一页传递到另一页,它正确地传递了值,然后成功地传递给了存储过程,但是一次又一次地键入Request.QueryString["something"]非常烦人,所以我创建了一个方法,但该方法不会返回/传递任何值,并且会引发nullreference异常。

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

您需要先确保该项目存在,然后再尝试访问它:

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();
    This will work
    public string val(string a)
    {
        return Request.QueryString[a];
    }

将querystring值转换为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',然后从那里返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM