当您声明 aButton
用作DefaultButton
ASP.NET 中的时会发生什么Panel
?我知道 ASP.NET 会将面板的内容呈现给 adiv
并将一堆东西传递给 ViewState。ViewState 中是否有 JavaScript 处理呈现的 Button 的单击事件?我认为 ViewState 就是这样 - 关于状态的信息。它是如何工作的?
问问题
6167 次
1 回答
17
您对 ViewState 的看法是正确的。它旨在保留 Page 和 Controls 值。也就是他们的状态。你可以在这里确认。
关于默认按钮,没有什么魔力。div
为了绑定 ENTER 键事件,添加了一个 javascript 。
让我们来看看!这段代码:
<asp:Panel ID="panel" runat="server" DefaultButton="button">
<asp:Button ID="button" runat="server" Text="this is the button" />
</asp:Panel>
呈现为:
<div id="panel" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'button')">
<input type="submit" name="button" value="this is the button" id="button">
</div>
这个 javascript 是由 WebForms 引擎生成的,但如果你好奇,我们可以寻找它:
function WebForm_FireDefaultButton(event, target) {
if (event.keyCode == 13) {
var src = event.srcElement || event.target;
if (!src || (src.tagName.toLowerCase() != "textarea")) {
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton && typeof(defaultButton.click) != "undefined") {
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
}
return true;
}
请注意它如何测试当前聚焦的控件是否为textarea
. 这是因为 a 中的 ENTERtextarea
主要是一个新行,而不是提交。
于 2013-07-04T23:30:35.260 回答