首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面板的DefaultButton属性是如何工作的?

面板的DefaultButton属性是如何工作的?
EN

Stack Overflow用户
提问于 2013-07-03 05:15:52
回答 1查看 6.1K关注 0票数 10

当您声明一个Button作为ASP.NET Panel中的DefaultButton时,会发生什么?据我所知,ASP.NET会将面板的内容呈现给div,并将大量内容传递给ViewState。ViewState内部是否有处理呈现的按钮的单击事件的JavaScript?我以为ViewState只是关于状态的信息。它怎麽工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-05 07:30:35

关于ViewState你是对的。它的设计目的是保留Page和控件的值。这就是他们的状态。你可以确认一下,here

关于默认按钮,没有什么神奇之处。一个javascript被添加到div,以便绑定Enter键事件。

让我们来看看吧!这段代码:

代码语言:javascript
复制
<asp:Panel ID="panel" runat="server" DefaultButton="button">
    <asp:Button ID="button" runat="server" Text="this is the button" />
</asp:Panel>

将呈现给以下内容:

代码语言:javascript
复制
<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引擎生成的,但是如果你感兴趣的话,我们可以找到它:

代码语言:javascript
复制
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的。这是因为textarea中的ENTER大多是一个新行,而不是submit。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17435964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档