我通过查询字符串将一些值从一个页面传递到另一个页面,它正确传递值然后成功传递给存储过程但是再次输入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();
}
答案 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'并从那里开始。