0

在我的网格视图中,我希望当用户单击激活时,它会导航到 activate.aspx 页面。我想从上一页检索三个值到 activate.aspx 页面。我的代码是:

    protected void Page_Load(object sender, EventArgs e)
    {
         if (this.Page.PreviousPage != null)
         {
         int rowIndex = int.Parse(Request.QueryString["RowIndex"]);
        GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("GridView1");
        GridViewRow row = GridView1.Rows[rowIndex];
        Label1.Text = row.Cells[3].Text;
        Label2.Text = row.Cells[2].Text;
        Label3.Text = row.Cells[2].Text;

        SqlDataAdapter da = new SqlDataAdapter("insert into login values('" + Label1.Text + "','" + Label2.Text + "','" + Label3.Text + "')",con);
        DataSet ds = new DataSet();
        da.Fill(ds);
     }
    }

  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Redirect")
    {
        String email = "lblemail.Text";
        String mob = "lblmobno.Text";
        Server.Transfer("activate.aspx?RowIndex=" + email +mob, true);

    }
}

Aspx 标记

   <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 
        onrowcommand="GridView1_RowCommand">
        <Columns>
            <asp:TemplateField HeaderStyle-Font-Bold="true" HeaderStyle-Font-Size="Larger" HeaderText="Activate/Delete"
                ItemStyle-Width="150px">
                <ItemTemplate>
                    <asp:LinkButton ID="linkbutton1" runat="server" Text="Activate" CommandName="Redirect"
                        CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'></asp:LinkButton>
                    <span onclick="return confirm('Are You sure want to Delete?')">
                        <asp:LinkButton ID="linkbutton2" runat="server" Text="Delete" CommandName="Delete"></asp:LinkButton>
                    </span>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

我收到以下行的输入字符串格式不正确的错误:

    int rowIndex = int.Parse(Request.QueryString["RowIndex"]);

请帮助我。

4

2 回答 2

0

这是因为您在 RowIndex 中发送文本/字符串,而作为 RowIndex 即用于访问 Rows 集合的索引应该是一个整数。您传递给 rowindex 的是 'lblemail.Textlblmobno.Text',当您尝试将其解析为 int 时,它会引发一个明显的错误。

更新:好的,您不需要传递 rowIndex。

第一个变化:-

String email=lblEmail.Text;

String mob=lblMob.Text;

第二个变化:-

将查询字符串参数重命名为更有意义的名称(我已经在下面的代码中将 rowIndex 重命名为电子邮件)

第三个变化:-

protected void Page_Load(object sender, EventArgs e)
{
    String email= Request.QueryString["email"];
    String mobNumber= Request.QueryString["mob"];
    String yourThirdParameter = Request.QueryString["thirdOne"]; // Provide your third parameter.

    SqlDataAdapter da = new SqlDataAdapter("insert into login values('" + email + "','" + mob + "','" + yourThirdParameter  + "')",con);
// Assuming this is the sequence.you can change it your way.

    DataSet ds = new DataSet();
    da.Fill(ds);

}


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Redirect")
    {
        String email = lblemail.Text;
        String mob = lblmobno.Text;
        String thirdOne= // Fill it as is the need
        Server.Transfer("activate.aspx?email=" + email+"&mob=" +mob+"&thirdOne="+thirdOne, true);

    }
}

警报:- 我怀疑如果您还必须传递密码,那么不应使用 QueryString。也不建议在 QueryString 中传递电子邮件、手机号码。

于 2013-10-28T07:14:07.407 回答
0
 if (e.CommandName == "Redirect")
    {
        String email = "lblemail.Text";
        String mob = "lblmobno.Text";
        Server.Transfer("activate.aspx?RowIndex=" + email +mob, true);

    }

在这里您可以看到您将电子邮件和移动值作为查询字符串值发送,因此您的查询字符串看起来像这样

activate.aspx?RowIndex=lblemail.Textlblmobno.Text

当您获得 rowindex 值时,它将返回lblemail.Textlblmobno.Text作为值 调试它并观察它,您会看到它,所以现在您要做的就是从您正在使用的 gridview 传递 int 值

您也可以使用隐藏字段并从GridView1_RowCommand中找到它

我希望这会对你有所帮助... :)

于 2013-10-28T07:20:53.497 回答