我在ASP.NET内容表单上有一个CheckBox,如下所示:
<asp:CheckBox runat="server" ID="chkTest" AutoPostBack="true" OnCheckedChanged="chkTest_CheckedChanged" />
Run Code Online (Sandbox Code Playgroud)
在我的代码后面我有以下方法:
protected void chkTest_CheckedChanged(object sender, EventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中加载页面并单击CheckBox时,它会被检查,页面会回发,我可以看到chkTest_CheckedChanged被调用.
然后,当我再次单击CheckBox时,它将取消选中,页面会回发,但chkTest_CheckedChanged不会被调用.
该过程是可重复的,因此一旦取消选中CheckBox,检查它将触发事件.
我在Web.Config中禁用了View State,启用View State会导致此问题消失.在View State保持禁用状态时,我可以做些什么才能获得可靠的事件?
更新:
如果我Checked="true"在服务器标签上设置,当取消选中CheckBox时事件触发,情况就会反转,而不是相反.
更新2:
我已经OnLoadComplete在我的页面中覆盖了,并且从那里我可以确认Request.Form["__EVENTTARGET"]已正确设置我的CheckBox的ID.
我在选择字符串集合时遇到问题,并使用以下小例子进行复制.
给出以下SQL:
CREATE TABLE [Post] (
[Id] INT IDENTITY NOT NULL,
[Name] NVARCHAR(20) NOT NULL,
CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED ([Id])
)
CREATE TABLE [Category] (
[Id] INT IDENTITY NOT NULL,
[PostId] INT NOT NULL,
[Name] NVARCHAR(20) NOT NULL,
CONSTRAINT [FK_Category_Post] FOREIGN KEY ([PostId]) REFERENCES [Post]([Id])
)
INSERT INTO [Post] ([Name]) VALUES ('Post 1')
INSERT INTO [Category] ([PostId], [Name]) VALUES (1, 'Alpha')
Run Code Online (Sandbox Code Playgroud)
和代码(我使用LINQPad):
void Main()
{
using (var sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.Dialect<MsSql2012Dialect>().ConnectionString(@"Data Source=(localdb)\Projects;Initial Catalog=NhTest;"))
.Mappings(x => {
x.FluentMappings.Add(typeof(PostMap));
})
.BuildSessionFactory()) …Run Code Online (Sandbox Code Playgroud)