1

在asp.net 应用程序中,我得到了我真的不想要的自动生成的javascript 事件。我有一个名为 login 的按钮,因为这个自动生成的 javascript 事件我的客户端无法登录,它是自动生成的,我真的不知道为什么会这样

客户用户控件 .ascx 文件中的 Asp.net 按钮

<asp:Button ID="cmdLogin" runat="server" Text="Login" CssClass="Footer_button" 
                        CommandName="login"  CausesValidation="True" />

如您所见,按钮中根本没有事件,但是当我在任何浏览器中运行我的应用程序时,它会呈现自动生成的事件

自动生成的 JavaScript 事件

    <input name="ctl00$header1$slidingpanel1$Login1$cmdLogin" value="Login" id="ctl00_header1_slidingpanel1_Login1_cmdLogin" class="Footer_button" type="submit"
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$header1$slidingpanel1$Login1$cmdLogin&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))">

我想摆脱这个自动生成的onclick事件,而且它正在浏览器中的 aspnetform 中渲染一个 onsubmit 事件

<form name="aspnetForm" method="post" action="default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">

我想摆脱这个自动生成的javascript事件请帮助我解决这个问题,因为其他人也可能有这个问题提前谢谢

4

4 回答 4

2

它是 javascript,因此您可以完全摆脱它。(你应该吗?那不是问题..)

只需将其放在页面底部(如果调用将引发异常);

window.WebForm_OnSubmit = null;
window.WebForm_DoPostBackWithOptions = null;

或者覆盖它来做你想做的事,包括无操作:

window.WebForm_OnSubmit = window.WebForm_DoPostBackWithOptions = function() { };

或者在呈现文档时使用 javascript 将其从控件中删除:

document.getElementById("ctl00_header1_slidingpanel1_Login1_cmdLogin").onclick = null;

或者

document.getElementById("ctl00_header1_slidingpanel1_Login1_cmdLogin").onclick = function()
{
    alert("My custom onclick handler");
}

并从表单中删除回发处理程序:

document.getElementById("aspnetForm").onsubmit = null;

但是,如果您不使用回发并且没有将客户端 onclick 处理程序附加到此按钮,那么您到底在使用它做什么?只是正常提交​​表格?请提供更多详细信息。

我通常用我自己的自定义函数覆盖 ASP.NET 版本的 doPostBack 和/或 form.onsubmit 来处理其他事情,比如强制等待挂起的 AJAX 调用完成(或中止它们).. 取决于我我试图实现。

于 2013-10-24T20:07:41.360 回答
0

是的,没有什么是必要的,它是 javascript,我已经弄清楚了,为什么这对其他人来说是幸福的,我想分享它....

Acutlly 我正在使用 Asp.net 登录控件,这s event Authenticate from code behind that就是为什么我不需要在按钮上放置单击事件,因为此按钮处于登录控制之下,并且通过 asp.net 登录控制事件“Authenticate”进行登录身份验证,因此无需放置任何按钮上的事件,但来自后面的代码的登录控制

<asp:Login ID="Login1" runat="server">
                <LayoutTemplate>
                    <label for="log">User Name: </label>
                    <asp:TextBox ID="Username" runat="server" ></asp:TextBox>

                    <label for="pwd">Password: </label>
                    <asp:TextBox ID="password" TextMode="Password" runat="server"></asp:TextBox>
                  // this is the Button where javascript event were rendered in browsre
                    <asp:Button ID="cmdLogin" runat="server" Text="Login" CommandName="login" CssClass="Footer_button" />                       
                </LayoutTemplate>
 </asp:Login>

此登录控件位于自定义控件文件 .ascx 下,我在 Default.aspx 页面中注册了此控件,并且在默认页面中有更多自定义控件,我在 Default.aspx 页面中注册了如下

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false"
    CodeFile="Default.aspx.vb" Inherits="_Default" Title="Minato Cars - Home Page" %>

<%@ Register Src="~/Controls/CallRequest.ascx" TagName="CallRequest" TagPrefix="psc" %>
<%@ Register Src="~/Controls/RequestACar.ascx" TagName="RequestACar" TagPrefix="psc" %>
<%@ Register Src="~/Controls/Skype.ascx" TagName="Skype" TagPrefix="psc" %>
<%@ Register Src="~/Controls/EmailInfo.ascx" TagName="EmailInfo" TagPrefix="psc" %>
<%@ Register Src="~/Controls/QuickContact.ascx" TagName="QuickContact" TagPrefix="psc" %>
<%@ Register Src="~/Controls/SearchByVehicleType.ascx" TagName="SearchByVehicleType" TagPrefix="psc" %>
<%@ Register Src="~/Controls/SearchbyMake.ascx" TagName="SearchByMake" TagPrefix="psc" %>

(这是要理解的重点)

我在 CallRequest.ascx 和 QuickContact.ascx 客户控制中进行了一些 asp.net 验证。并且默认页面使用 Masterpage..

众所周知,每当我们使用 Asp.net Validation 时,它会在浏览器中呈现 javascript 事件 _dopostback,并在表单中或在 asp.net aspnetform 中呈现 onsubmit 事件,有时它还会在提交类型的按钮上呈现 onclick 事件(type=submit按钮),这就是为什么由于 asp.net 验证而我得到自动生成的 javascript 事件的原因。我已经通过使用没有表单的 jQuery 验证来处理它,现在s working.. althoug i have test Cause Validation of submit button but the problem was still same which i have never faced before... but it没关系 Jquery 验证做了他的工作,众所周知......

对不起我的英语不好

于 2013-10-25T09:23:00.130 回答
0

您无法更改使用 ASP.Net 网络表单构建的此事件挂钩模型。

只要您需要,'onclick', 'onselectedindexchanged', etc当从页面触发事件时,需要调用像您这样的服务器端事件处理程序。

此事件映射由 javascript 代码完成,例如onclick, onchange, etc.

ASP.Net 在您的页面内部添加一个脚本 (.axd) 并处理该WebForm_PostbackOptions功能。

查看如何在不使用 JavaScript 的情况下防止 PostBack?

如果要防止事件绑定,请停止使用server side events并自行处理,或者use ASP.Net MVC

于 2013-10-24T13:21:27.610 回答
-1

函数 ButtonWorkAgain() { window.WebForm_OnSubmit = function () { return true; }; }
于 2015-07-06T16:22:34.967 回答