4

如何将 Request.Query 字符串转换为整数值。我已经尝试了所有的 Convert.ToInt32 和 Int32.Parse 但它说输入字符串的格式不正确。我使用字符串值作为存储过程的输入,该存储过程只接受该字段的整数类型。

这是代码的一部分-

string rid=Request.QueryString["RID"];
lblRID.Text = rid;
int id= Int32.Parse(rid);

    if (lblRID.Text!= null)
    SqlCommand myCommand = new SqlCommand("usp_NewResource_get", myConnection);
        myCommand.Parameters.AddWithValue("@RID",id);  //RID is int in database and stored procedure
        myCommand.CommandType = CommandType.StoredProcedure;
4

7 回答 7

9
int foo;
int.TryParse(Request.QueryString["foo"], out foo);

或者就像你说的,int.Parse应该转换为 int

你能在这里发布一些代码吗?

于 2009-02-14T10:32:18.647 回答
7

这些天的答案因您使用的框架而异,因为 msft 已将查询参数作为视图属性模型的一部分进行绑定(参考:https://docs.microsoft.com/en-us/dotnet/api/microsoft。 aspnetcore.mvc.fromqueryattribute?view=aspnetcore-3.1)。

例如,您仍然可以通过 httpcontext 访问大多数内容。

var fooIsInt = int.TryParse(HttpContext.Request.Query["foo"], out var foo);

.net 2.0 中网络表单的原始示例

快速而肮脏(并且在页面加载中,因为这是一个示例,您应该能够从中弄清楚发生了什么)

<script runat="server">
    private void Page_Load(object sender, System.EventArgs e){
        
        string test = Request.QueryString["foo"];

        //Convert the query string you captured to an int and store it in an int.
        int intTest = Convert.ToInt32(test); 

        Response.Write(intTest.GetType() + "<br>" + intTest);   
    }
</script>
于 2009-02-17T13:50:31.160 回答
3

查看您提供给 Int32.Parse 的输入怎么样?

于 2009-02-14T10:25:20.817 回答
2

我们使用一个基类,每个 Page 都从该基类继承。我们有以下方法从查询字符串参数返回整数值:

protected int FetchQueryStringIdentifierByKey(string key)
{
    int identifier;
    var isInt = int.TryParse(Request.QueryString[key], out identifier);
    return (isInt) ? identifier : 0;
}

感谢Jayson Knight在 .NET 2.0 下对原始基准测试结果的研究。

于 2011-11-14T12:24:43.130 回答
1
string id = Request.QueryString["RID"].ToString(); 
userid=Convert.ToInt32(id);
于 2014-11-08T03:52:55.480 回答
0

像这样使用 TryParse 怎么样:

string rid = Request.QueryString["RID"];
int id = 0;
if (!string.IsNullOrEmpty(rid) && Int32.TryParse(rid, out id))
{
    lblRID.Text = 摆脱;
    SqlCommand myCommand = new SqlCommand("usp_NewResource_get", myConnection);
    myCommand.Parameters.AddWithValue("@RID",id);
    myCommand.CommandType = CommandType.StoredProcedure;
    我的命令。执行...
}
于 2009-02-14T11:41:55.513 回答
0

问题是带有RID参数的查询字符串中传递的值不是数字,因此无法解析为int。例如,您有?RID=hello或可能根本没有 RID 参数(在这种情况下,值为空)。检查查询字符串以查看传递的实际值。

于 2009-02-14T12:46:54.813 回答