簡體   English   中英

為什么textbox.Text返回一個空字符串?

[英]Why is textbox.Text returning an empty string?

首先讓我先說明這一事實,我知道這個問題已被問過很多次。 我已經嘗試實現我讀過的所有內容,但尚未解決我的問題。

我有一個購物車顯示在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();        
}

這是aspx文件:

<asp:GridView ID="gvShoppingCart" runat="server" AutoGenerateColumns="False" OnRowCancelingEdit="gvShoppingCart_RowCancelingEdit" OnRowDeleting="gvShoppingCart_RowDeleting" OnRowEditing="gvShoppingCart_RowEditing" OnRowUpdating="gvShoppingCart_RowUpdating" ClientIDMode="AutoID">
    <Columns>
        <asp:BoundField DataField="NAME" HeaderText="Product name" ReadOnly="True" />
        <asp:ImageField DataImageUrlField="IMAGE" DataImageUrlFormatString="~\Images\{0}" HeaderText="Image" ReadOnly="True">
        </asp:ImageField>
        <asp:BoundField DataField="PRICE" HeaderText="Price" ReadOnly="True" />
        <asp:BoundField DataField="QUANTITY" HeaderText="Quantity" />
        <asp:TemplateField HeaderText="Total">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Double.Parse(Eval("PRICE").ToString()) * Int32.Parse(Eval("QUANTITY").ToString()) %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <EditItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:LinkButton>
                &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowDeleteButton="True" />
    </Columns>
</asp:GridView>

我通常很擅長找到答案,但是這個讓我很難過。

單擊更新后站點崩潰,因為int quantity = Int32.Parse(txtQuantity.Text);返回的值int quantity = Int32.Parse(txtQuantity.Text); 是“”顯然你不能從中解析一個int。

至於“ASP.NET驗證錯誤消息更改標簽文本”的可能重復的標記。 我無法找到任何指向答案方向的東西。

Page_PreInit調用FillData() 否則,當ASP.Net運行時為網格恢復ViewState時,包括新的Textbox數據,就無處可去了。 請記住,每個服務器事件都使用頁面類的全新實例,並且必須從頭開始重建整個頁面。

由於我剛剛學習ASP.net和C#,這是一個很難解決的問題。

當我能夠在之前的任務中完成這項工作時,我沒有使用Master頁面,我正在使用這個項目。 問題在於我在Master頁面中使用<form runat="server">標記。 由於每頁只能有一個<form runat="server">標記,因此我的GridView沒有包含在其中。 一旦我刪除了Master頁面並在GridView周圍添加了<form runat="server">包裝器,一切都按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM