javascript - Panel 的 DefaultButton 属性如何工作?

标签 javascript asp.net viewstate

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

最佳答案

关于 ViewState,您是对的。它旨在保留页面和控件值。也就是说,他们的状态。你可以确认一下here .

关于默认按钮,没有魔法。将 javascript 添加到 div 以绑定(bind) ENTER 键事件。

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

<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。这是因为 textarea 中的 ENTER 主要是换行,而不是提交。

关于javascript - Panel 的 DefaultButton 属性如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435964/

相关文章:

javascript - 如何从YUI沙箱获取数据

javascript - d3 - 模拟 x Axis 的标签

c# - Entity Framework 代码优先 - 列 ID 无效

.net - 渗透测试盲 SQL 注入(inject)和 View 状态错误

c# - 如果未呈现按钮,客户端能否以编程方式获取按钮单击事件?

asp.net - 如何找出产生了哪些控件(多少个)ViewState

javascript - 使用谷歌表单从手机捕获图片/图像

javascript - 如何在 vuejs 中显示自定义加载栏并使用自定义指令控制它?

c# - 断言被测系统应该抛出断言异常

asp.net - Response.Redirect 扩展方法中的 HttpContext.Current 为 null