我有一个复选框,当选中它时,我希望运行一个更新过程来更新复选框传递的值。当我选中复选框时,我希望它将true传递到存储过程中。但我得到的却是相反的结果。我的处理程序工作正常,所有内容都传递到了过程中,但我的复选框值与我刚才执行的操作相反(即,当检查时,它发送假,即检查之前的值)。
我的调试证实了这一点。我最初的研究让我认为我的ViewState有问题,所以我确保在ASP端的HTML中启用它:
<%@ Page Title="" Language="VB" MasterPageFile="~/MasterStuff.master" AutoEventWireup="false" EnableViewState="true" CodeFile="Stuff.aspx.vb" Inherits="Test_Stuff" %>
但这似乎并没有改变任何东西,我的复选框编码如下:
<asp:TableRow>
<asp:TableCell>
<asp:CheckBox runat="server" ID="chkChecked" AutoPostBack="true" />
</asp:TableCell>
</asp:TableRow>
在VB端,我的处理程序和对存储过程的调用:
Private Sub chkChecked_Checked(ByVal sender As Object, ByVal e As EventArgs) Handles chkChecked.CheckedChanged
UpdateStatus()
End Sub
Public Sub UpdateStatus()
Using sqlCmd As New SqlCommand
Try
With sqlCmd
.CommandType = CommandType.StoredProcedure
.CommandText = "UpdateStatus"
.Connection = SqlCn
.Parameters.Clear()
.Parameters.Add("@Checked", SqlDbType.Bit).Value = chkChecked.Checked
.ExecuteNonQuery()
End With
LoadPage()
Catch ex As Exception
lblError.AppendNewLine("The following error was thrown in UpdateStatus:<br>" + ex.Message)
End Try
End Using
End Sub
1条答案
按热度按时间hts6caw31#
问题是我们可能有1或20个复选框。
那么,这是指页面上的哪个复选框呢?
它可以是页面上的“任何”一个。
因此,当您单击复选框时,我们必须“获取”或“抓取”当前复选框。
所以,这应该行得通:
编辑:部分跟进
此标记:
但是,更正上述内容后:
以及背后的代码:
因此,调试窗口确实显示了传递给例程的复选框的正确输出(值的切换)。
但是,既然复选框按钮不在页面上,那么您是如何设法连接单击事件的呢?
通常,当这样的控件位于表格(或网格视图,或repeater等)中时,您不能(也不会)双击该控件。
因此,您在in markup中执行的操作将以这种方式添加/创建事件:
还有表格,网格视图之类的?
然后你就可以自由地连接事件了,你注意到代码后面的事件现在已经像c#那样连接起来了,这个类没有“handles”标签,如下所示:
但是,两者都应该起作用。
我怀疑这里需要更多的信息和背景。
不过,我会尝试向表中添加runat=“server”。(还有一个“id”。
但是,复选框的单击事件应该是“发件人”,因此拾取选中的值应该会起作用。
尝试转储句柄chkChecked. CheckedChanged。
(just注解掉该存根)。尝试使用intel-sense创建代码存根,然后将现有代码剪切并粘贴到checkedChanged事件中。
无论哪种方式(checkedChanged事件)都应该触发,但由于这是一个表,并且复选框(理论上)可以重复多次,因此我将使用实际的checkedChanged事件存根,而不是能够/可能拾取任何一个被单击的复选框的“处理程序”。
可能这里缺少一些更新面板或一些其他细节。