10

当您声明 aButton用作DefaultButtonASP.NET 中的时会发生什么Panel?我知道 ASP.NET 会将面板的内容呈现给 adiv并将一堆东西传递给 ViewState。ViewState 中是否有 JavaScript 处理呈现的 Button 的单击事件?我认为 ViewState 就是这样 - 关于状态的信息。它是如何工作的?

4

1 回答 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 回答