首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridView RowCommand触发意外函数

GridView RowCommand触发意外函数
EN

Stack Overflow用户
提问于 2012-10-12 03:46:02
回答 1查看 1.3K关注 0票数 0

我有一个GridView,在模板中有一个按钮--点击按钮,对数据库进行查询并动态创建、输入字段( textbox和CuteEditor),并将它们的"text“属性设置为查询的结果。

这时会动态创建更新按钮(我正在将onClientClick属性设置为"Update“函数),因此如果用户更改这些输入字段中的任何内容,则可以更新数据库

问题是,当用户单击GridView TemplateField中的按钮时,就会在不应该的情况下触发我的funcion "UpdatePost“。

导致UpdatePost过早触发的原因是什么?

删除OnClientClick解决了这个问题(函数不会过早触发)。

就像OnClientClick是由GridView模板字段中的my按钮的Click函数触发的。

代码语言:javascript
复制
Private Function UpdatePost()
    'Find subject and Post Content
    Dim myPh As PlaceHolder = plcEditor
    Dim EditorContent As CuteEditor.Editor = plcEditor.FindControl("editEditor")
    Dim editorSubject As TextBox = plcEditor.FindControl("editorSubject")
    Dim hiddenID As HiddenField = plcEditor.FindControl("hiddenID")
    Dim connStr As String = ConfigurationManager.ConnectionStrings("oakfratnewsConnectionString").ConnectionString
    Dim nCon As New SqlConnection(connStr)
    Dim addCon As New SqlConnection(connStr)
    Dim addCom As New SqlCommand("UPDATE News SET Subject = @Subject, [Content] = @Content WHERE (ID = @ID)", addCon)
    addCom.Parameters.AddWithValue("@Subject", editorSubject.Text)
    addCom.Parameters.AddWithValue("@ID", hiddenID.Value)
    addCom.Parameters.AddWithValue("@Content", Server.HtmlDecode(EditorContent.Text))
    Try
        addCon.Open()
        addCom.ExecuteNonQuery()
        addCon.Close()
    Catch ex As Exception



    End Try

    Return True
End Function

Private Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand

    If e.CommandName = "editPost" Then
        'Remove DataGrid'''''''''
        GridView1.Visible = False
        '''''''''''''''''''''''''
        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
        Dim row As GridViewRow = GridView1.Rows(index)
        Dim ID As String = GridView1.Rows(index).Cells(0).Text
        ''''''''''''''''''''''''''''''''''''''''CREATE Controls for Placeholder
        Dim editEditor As New CuteEditor.Editor
        Dim hiddenID As New HiddenField
        hiddenID.ID = "hiddenID"
        hiddenID.Value = ID
        editEditor.ID = "editEditor"
        Dim subjectTXT As New TextBox
        subjectTXT.ID = "editorSubject"
        Dim br As New Literal
        Dim editButton As New Button
        Dim sbjLabel As New Label


        sbjLabel.Text = "Subject:   "

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        editEditor.AutoConfigure = CuteEditor.AutoConfigure.Simple
        br.Text = "<br/><br/>"
        plcEditor.Controls.Add(hiddenID)
        plcEditor.Controls.Add(sbjLabel)
        plcEditor.Controls.Add(subjectTXT)
        subjectTXT.Width = "100"
        subjectTXT.Height = "25"
        subjectTXT.CssClass = "editInput"
        plcEditor.Controls.Add(br)
        plcEditor.Controls.Add(editEditor)
        plcEditor.Controls.Add(br)
        plcEditor.Controls.Add(br)
        plcEditor.Controls.Add(editButton)
        editButton.Text = " Submit Changes "
        editButton.Height = 40
        editButton.Width = 300
        editButton.OnClientClick = UpdatePost()

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim connStr As String = ConfigurationManager.ConnectionStrings("oakfratnewsConnectionString").ConnectionString
        Dim nCon As New SqlConnection(connStr)
        Dim addCon As New SqlConnection(connStr)
        Dim addCom As New SqlCommand("SELECT * FROM [News] WHERE ([ID] = @ID)", addCon)
        addCom.Parameters.AddWithValue("@ID", ID)


        Dim results As SqlDataReader
        addCon.Open()
        results = addCom.ExecuteReader
        While results.Read()
            Dim editText As String = results.Item("Content")
            Dim Subject As String = results.Item("Subject")
            editEditor.Text = editText
            subjectTXT.Text = Subject
        End While
        addCon.Close()




    End If
End Sub

网格-视图代码

代码语言:javascript
复制
  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    CellPadding="3" DataKeyNames="ID" DataSourceID="SqlDataSource1" 
    Width="776px" BackColor="White" BorderColor="#D8D8D8" BorderStyle="None" 
    BorderWidth="1px">
    <Columns>
        <asp:BoundField ItemStyle-Width="30" DataField="ID" HeaderText="ID" InsertVisible="False" 
            ReadOnly="True" SortExpression="ID" />
        <asp:BoundField ItemStyle-Width="140" DataField="Subject" HeaderText="Subject" 
            SortExpression="Subject" />
        <asp:BoundField DataField="Date" HeaderText="Date Published" 
            SortExpression="Date" />
        <asp:TemplateField>

            <ItemTemplate>
                <asp:Button ID="grdEdit"  height="70" Width="200" runat="server" CommandName="editPost" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>" Text="Edit Post" />
                <asp:Button ID="Button2"  height="70" Width="200" runat="server" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>" Text="Delete Post" />
            </ItemTemplate>

        </asp:TemplateField>
    </Columns>
    <FooterStyle BackColor="White" ForeColor="Red" />
    <HeaderStyle BackColor="Green" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
    <RowStyle ForeColor="#000066" />
    <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#F1F1F1" />
    <SortedAscendingHeaderStyle BackColor="#007DBB" />
    <SortedDescendingCellStyle BackColor="#CAC9C9" />
    <SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>
EN

回答 1

Stack Overflow用户

发布于 2012-10-12 03:55:14

<asp:Button />呈现将触发回发的HTML。OnClientClick属性用于JavaScript,如果不取消提交表单的默认操作,则客户端事件和回发仍将同时发生。要么使用标准按钮输入(<input type="button" />),要么在用于OnClientClick属性的JavaScript函数中尝试调用OnClientClick

编辑:,我认为真正的答案是,您正在尝试使用OnClientClick属性,希望它调用服务器端代码。它用于指定单击按钮时要调用的JavaScript函数。调用UpdatePost的原因是同一个按钮自动连接以触发回发。而且,由于CommandName与该按钮的服务器端事件处理程序中的条件匹配,所以它使用以下代码调用UpdatePost

代码语言:javascript
复制
editButton.OnClientClick = UpdatePost()

这一行代码不像你想的那样。它实际上正在执行UpdatePost方法,并将OnClientClick属性设置为UpdatePost的返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12851921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档