OnClick与OnClientClick为asp:CheckBox?
有没有人知道为什么asp:CheckBox客户端JavaScript处理程序需要是一个OnClick =“”属性,而不是一个OnClientClick =“”属性,为asp:button?
例如,这工作:
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
这不(没有错误):
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
但是这个工作:
<asp:Button runat="server" OnClientClick="alert('Hi');" />
这不(编译时错误):
<asp:Button runat="server" OnClick="alert('hi');" />
(我知道Button.OnClick是什么;我想知道为什么CheckBox不能以同样的方式工作…)
这很奇怪。 我检查了CheckBox文档页面
<asp:CheckBox id="CheckBox1" AutoPostBack="True|False" Text="Label" TextAlign="Right|Left" Checked="True|False" OnCheckedChanged="OnCheckedChangedMethod" runat="server"/>
如您所见,没有定义OnClick或OnClientClick属性。
牢记这一点,我认为这是发生了什么事情。
当你这样做的时候,
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
ASP.NET不会修改OnClick属性并在浏览器上呈现它。 它会呈现为:
<input type="checkbox" OnClick="alert(this.checked);" />
显然,浏览器可以理解“OnClick”并提出警告。
在这种情况下
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
同样,ASP.NET不会更改OnClientClick属性,并将其呈现为
<input type="checkbox" OnClientClick="alert(this.checked);" />
由于浏览器不理解OnClientClick什么都不会发生。 它也不会产生任何错误,因为它只是另一个属性。
您可以通过查看呈现的HTML来确认上面的内容。
是的,这根本不直观。
你说得对,这是不一致的。 发生什么事是CheckBox没有服务器端的OnClick事件,所以你的标记呈现给浏览器。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox_events.aspx
而Button确实有一个OnClick – 所以ASP.NET需要在您的OnClick标记中引用一个事件。
因为他们是两种不同的控制…
你看,你的网页浏览器不知道服务器端编程。 它只知道它自己的DOM和它使用的事件模型…以及呈现给它的对象的点击事件。 你应该检查从ASP.Net实际发送到浏览器的最终标记,看看你自己的差异。
<asp:CheckBox runat="server" OnClick="alert(this.checked);" />
呈现
<input type="check" OnClick="alert(this.checked);" />
和
<asp:CheckBox runat="server" OnClientClick="alert(this.checked);" />
呈现
<input type="check" OnClientClick="alert(this.checked);" />
现在,据我所知,没有任何浏览器支持DOM中的“OnClientClick”事件。
如果有疑问,请在发送给浏览器时始终查看输出的源代码…您可以看到一个完整的debugging信息世界。
对于那些在这里寻找服务器端的OnClick
处理程序的人来说,它是OnCheckedChanged
我正在清理警告和消息,并看到VS会警告:validation(ASP.Net):属性“OnClick”不是元素“CheckBox”的有效属性。 使用htmlinput控件来指定一个客户端处理程序,然后你将不会得到额外的跨度标签和两个元素。
一个解决scheme是使用JQuery:
$(document).ready( function () { $('#mycheckboxId').click(function () { // here the action or function to call }); } );
- ViewStateMode与EnableViewState
- Request.IsAuthenticated如何工作?
- 什么是ReSharper的一些替代品?
- 如何获得一个string的前五个字符
- 名为“x”的路由已经在路由集合中。 路由名称必须是唯一的。 ASP.NET MVC 3的exception
- “System.Data.Entity.Internal.AppConfig”的types初始值设定项引发exception
- 从客户端(*)检测到潜在危险的Request.Path值
- 使用entity framework时,什么是良好的devise实践?
- 在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'部分的错误