vb.net TextBox提交不变

时间:2016-05-31 18:31:21

标签: asp.net vb.net gridview

我有一个我在VS 2010中修改的传统VB.Net应用程序;这是相关的代码:

<form id="form1" runat="server">
    <asp:GridView ID="gvCommentsEdit" runat="server" ShowHeader="False">
        <Columns>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    *** On
                   <asp:Label ID="lblTimestamp" runat="server" Text='<%# Bind("comment_date") %>'></asp:Label>
                   <asp:Label ID="lblUpdateBy" runat="server" Text='<%# Bind("update_by") %>'></asp:Label> commented:<br />
                   <asp:TextBox ID="txtEditCommentPopup" runat="server" Columns="55" Rows="10" Text='<%# bind("text") %>' TextMode="MultiLine"></asp:TextBox>
                   <asp:LinkButton ID="lnkSaveComment" runat="server" OnClick="lnkSaveComment_Click">Save</asp:LinkButton>
                   <asp:LinkButton ID="lnkCancelEdit" runat="server" OnClick="lnkCancelEdit_Click">Cancel</asp:LinkButton>
                   <asp:HiddenField ID="hdnCommentID" Value='<%# Bind("comment_id") %>' runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</form>

代码背后是:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim IdNumber As Integer = sender.ClientQueryString
    Dim mydata As New Profile_Data

    gvCommentsEdit.DataSource = mydata.returnCommentsById(RequestedUsername, IdNumber)
    gvCommentsEdit.DataBind()

End Sub

Sub lnkSaveComment_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myRow = sender.parent
    Dim mydata As New Profile_Data
    Dim IdNumber As String = CType(myRow.FindControl("hdnCommentID"), HiddenField).Value
    Dim text As String = CType(myRow.FindControl("txtEditCommentPopup"), TextBox).Text

    mydata.UpdateComment(IdNumber, text)

    Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "CloseWindowScript", "window.opener.location.href = window.opener.location;window.close();", True)
End Sub

结束班

此页面是主页面的弹出窗口,并且填充正常。问题是当我更改txtEditCommentPopup TextBox然后调用lnkSaveComment_Click()时,它具有原始文本框值,而不是更改的值。我没有使用AutoPostBack。有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

假设数据库更新工作正常,问题是您在每个PostBack上绑定GridView,但数据更新后

当您单击按钮时,您应该看到调用了Page_Load方法,绑定了GridView,然后调用了lnkSaveComment_Click方法,更新了数据库。但之后,你不会重新绑定新数据。

所以我的猜测是,如果你再次点击更新按钮(或以某种方式导致另一个PostBack),你的新数据就会显示出来。

修复方法是确保在更新数据后再次绑定GridView。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    
    If Not IsPostBack Then
        BindGridView()
    End If    
End Sub

Sub lnkSaveComment_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim myRow = sender.parent
    Dim mydata As New Profile_Data
    Dim IdNumber As String = CType(myRow.FindControl("hdnCommentID"), HiddenField).Value
    Dim text As String = CType(myRow.FindControl("txtEditCommentPopup"), TextBox).Text

    mydata.UpdateComment(IdNumber, text)

    BindGridView()

    Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "CloseWindowScript", "window.opener.location.href = window.opener.location;window.close();", True)
End Sub

Sub BindGridView()
    Dim IdNumber As Integer = Page.ClientQueryString
    Dim mydata As New Profile_Data

    gvCommentsEdit.DataSource = mydata.returnCommentsById(RequestedUsername, IdNumber)
    gvCommentsEdit.DataBind()
End Sub

答案 1 :(得分:0)

我在你的页面加载中添加了这个

If Not IsPostBack Then 
     'your code 
  End If

所以用这个替换你的Page_Load: -

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    
    If Not IsPostBack Then

       Dim IdNumber As Integer = sender.ClientQueryString
       Dim mydata As New Profile_Data

       gvCommentsEdit.DataSource = mydata.returnCommentsById(RequestedUsername, IdNumber)
       gvCommentsEdit.DataBind()
  End If   
End Sub

希望这会对你有所帮助。