猿问

为什么 textbox.Text 返回一个空字符串?

首先让我以我知道这个问题已经被问过很多次的事实作为序言。我已尝试实施我已阅读的所有内容,但尚未解决我的问题。


我在 GridView 中显示了一个购物车,我正在尝试使更新功能正常工作。单击编辑(在有问题的行上)并更改文本框中的值,然后单击更新后,我总是返回一个空字符串。


我已经阅读了无数关于它是 PostBack 问题的帖子,但是我已经将我的 DataBind 方法封装在一个中,if(!Page.IsPostBack){}所以我不相信这是我的问题。


这些是我的 CodeFile 中的相关方法:


protected void Page_Load(object sender, EventArgs e)

{


    if (Session["thisCart"] == null)

    {

        Session["thisCart"] = new ShoppingCart();

    }

    thisCart = (ShoppingCart)Session["thisCart"];


    if (!Page.IsPostBack)

    {

        FillData();

    }


}


private void FillData()

{

    gvShoppingCart.DataSource = thisCart.Items;

    gvShoppingCart.DataBind();

    if (thisCart.Items.Count == 0)

    {

        lblGrandTotal.Visible = false;

    }

    else

    {

        lblGrandTotal.Text = string.Format("Grand Total = {0,19:C}", thisCart.GrandTotal);

        lblGrandTotal.Visible = true;

    }

}


protected void gvShoppingCart_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

    TextBox txtQuantity = (TextBox)gvShoppingCart.Rows[e.RowIndex].Cells[3].Controls[0];

    int quantity = Int32.Parse(txtQuantity.Text);

    thisCart.Update(e.RowIndex, quantity);

    gvShoppingCart.EditIndex = -1;

    FillData();        

}

我通常很擅长寻找答案,但是这个让我难住了。


单击更新后站点崩溃,因为返回的值int quantity = Int32.Parse(txtQuantity.Text);是“”,显然你不能从中解析一个 int。


至于可能重复的“ASP.NET验证错误消息以更改标签文本”的标签。我找不到任何指向答案方向的东西。


慕姐8265434
浏览 123回答 2
2回答

杨魅力

因为我刚刚学习 ASP.net 和 C#,所以要弄清楚这是一个非常痛苦的问题。当我能够在较早的任务中完成这项工作时,我并没有使用母版页,但我使用了这个项目。问题在于我<form runat="server">在母版页中使用了一个标签。<form runat="server">由于每页只能有一个标签,因此我的 GridView 没有包含在一个标签中。一旦我删除了母版页并<form runat="server">在 GridView 周围添加了包装器,一切都按预期工作。

湖上湖

来电。FillData()_&nbsp;Page_PreInit否则,当 ASP.Net 运行时恢复网格的 ViewState 时,包括新的文本框数据,还没有地方可以放置它。请记住,每个服务器事件都使用页面类的全新实例,并且必须从头开始重建整个页面。
随时随地看视频慕课网APP
我要回答