ASP.Net 按钮单击在未设置使用提交行为= "false"的情况下不启动



晚上好伙计们,我想得到一些帮助与我的代码,在我的注册按钮的onclick事件不会启动,如果我有一个模态在我的主页,但如果我删除它,它的工作原理。我该怎么做,有什么建议吗?这是我的代码

<div class="container mt-5 mb-5">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="card">
<header class="card-header">
<a href="#" class="float-right btn btn-outline-primary mt-1">Log in</a>
<h4 class="card-title mt-2">Sign up</h4>
</header>
<article class="card-body">
<div class="form-row mt-3">
<div class="col form-group">
<asp:Label ID="lblLastname" CssClass="col-form-label" runat="server" Text="Lastname:"></asp:Label>
<asp:TextBox ID="txtLastname" CssClass="form-control" runat="server" MaxLength="30" required="required"></asp:TextBox>             
</div>
<div class="col form-group">
<asp:Label ID="lblFirstname" CssClass="col-form-label" runat="server" Text="Firstname:"></asp:Label>
<asp:TextBox ID="txtFirstname" CssClass="form-control" runat="server" MaxLength="30" required="required"></asp:TextBox>       
</div>                     
</div>
<div class="form-row mt-3">
<div class="col form-group">
<asp:Label ID="lblUsername" CssClass="col-form-label" runat="server" Text="Username:"></asp:Label>
<asp:TextBox ID="txtUsername" CssClass="form-control" runat="server" MaxLength="40" required="required"></asp:TextBox>  
</div>
<div class="col form-group">
<asp:Label ID="lblPassword" CssClass="col-form-label" runat="server" Text="Password:"></asp:Label>
<asp:TextBox ID="txtPassword" CssClass="form-control" runat="server" TextMode="Password" required="required"></asp:TextBox>         
</div>                     
</div>
<div class="form-row mt-3">
<div class="col form-group">
<asp:Label ID="lblEmail" CssClass="col-form-label" runat="server" Text="Email:"></asp:Label>
<asp:TextBox ID="txtEmail" type="email" CssClass="form-control" runat="server" MaxLength="50" required="required"></asp:TextBox>        
</div>
<div class="col form-group">
<asp:Label ID="lblPhoneNumber" CssClass="col-form-label" runat="server" Text="Phone Number:"></asp:Label>
<asp:TextBox ID="txtPhoneNumber" CssClass="form-control" runat="server" MaxLength="11" required="required"></asp:TextBox>                   
</div>                     
</div>
<div class="form-row mt-3">
<div class="col form-group">
<asp:Label ID="lblGender" CssClass="col-form-label" runat="server" Text="Gender:"></asp:Label>
<asp:DropDownList ID="ddlGender" CssClass="form-control" runat="server">
<asp:ListItem Value="0">Please select your gender</asp:ListItem>
<asp:ListItem>Male</asp:ListItem>
<asp:ListItem>Female</asp:ListItem>
</asp:DropDownList>              
</div>
<div class="col form-group">
<asp:Label ID="lblBirthdate" CssClass="col-form-label" runat="server" Text="Birth Date:"></asp:Label>
<asp:TextBox ID="txtBirthdate" type="date" CssClass="form-control" runat="server" required="required"></asp:TextBox>                           
</div>                     
</div>
<div class="form-row mt-4">
<div class="col form-group">
<asp:Button ID="btnClear" CssClass="btn btn-danger btn-block" runat="server" CausesValidation="False" OnClick="btnClear_Click" Text="Reset" UseSubmitBehavior="False" />
</div>
<div class="col form-group">
<asp:Button ID="btnRegister" CssClass="btn btn-success btn-block" runat="server" OnClick="btnRegister_Click" Text="Register" />
</div>                     
</div>
</article>
<div class="border-top card-body text-center">Have an account? <a href="#">Log In</a></div>
</div>
</div>
</div>
</div>

下面是我的代码:

protected void btnClear_Click(object sender, EventArgs e) {
txtFirstname.Text = "";
txtLastname.Text = "";
txtUsername.Text = "";
txtPassword.Text = "";
txtEmail.Text = "";
txtPhoneNumber.Text = "";
txtBirthdate.Text = "";
ddlGender.SelectedValue = "0";
Response.Write("<script>alert('Successfully Cleared!')</script>");
}
protected void btnRegister_Click(object sender, EventArgs e) {
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=|DataDirectory|eMerch.mdf;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("uspAddUser", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@uName", SqlDbType.NVarChar).Value = txtUsername.Text.Trim();
cmd.Parameters.AddWithValue("@uPassword", SqlDbType.NVarChar).Value = txtPassword.Text.Trim();
cmd.Parameters.AddWithValue("@responseMessage", SqlDbType.NVarChar);
cmd.ExecuteNonQuery();
Response.Write("<script>alert('User Registration Success!')</script>");
conn.Close();
}

,这是我的代码模态在母版页:

<div class="modal fade" runat="server" id="LoginModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-center modal-login">
<asp:UpdatePanel ID="upLogin" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header">
<div class="avatar">
<img src="../Images/web/Avatar_Login.png" alt="Avatar">
</div>              
<h4 class="modal-title">Member Login</h4>   
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>       
</div>
<div class="modal-body">
<div class="alert alert-danger collapse text-center" id="errorCredentials">
Invalid Credentials
</div>
<div class="form-group">
<label class="col-form-label">Username:</label>
<asp:TextBox ID="txtUsername" runat="server" CssClass="form-control" required="required"></asp:TextBox>         
</div>
<div class="form-group">
<label class="col-form-label">Password:</label>
<asp:TextBox ID="txtPassword" runat="server" CssClass="form-control" TextMode="Password" required="required"></asp:TextBox>     
</div>                  
<div class="form-group">
<asp:Button ID="btnLogin" runat="server" CausesValidation="False" Text="Login" CssClass="btn btn-primary btn-lg btn-block login-btn" OnClick="btnLogin_Click"/>
</div>
</div>
<div class="modal-footer">
<a href="#">Forgot Password?</a>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>  
</div>
</div>

好的,我认为这是因为你使用了required="required"属性,使某些字段成为必需的。当你点击注册按钮,它会导致这个检查验证在所有的领域,所以那些在你的模态div以及那些在卡片div。这就是为什么它没有得到你的register_onclick事件。(字段的用户名和密码或未验证,因为他们没有输入)

您应该能够通过删除required="required"来证明这一点。从模态中的密码和用户名文本框。

要添加验证,你可以使用asp:RequiredFieldValidator来代替文本框等你想要强制使用的required属性。见下文

https://learn.microsoft.com/en us/dotnet/api/system.web.ui.webcontrols.requiredfieldvalidator?view=netframework - 4.8

您还可以添加验证组,这样每个按钮只验证某些控件。见下文

https://learn.microsoft.com/en-us/previous-versions/aspnet/ms227424 (v = vs.100)

希望这对你有帮助。请让我知道它是否有效。

从代码中看起来不错,但如果没有其他代码,很难判断发生了什么。按钮单击事件的代码是什么样子的?例如下面。

protected void btnRegister_Click(object sender, EventArgs e)
{
}
protected void btnClear_Click(object sender, EventArgs e)
{
}

编辑:我刚刚在一个空白的webforms项目中尝试了你的代码,它为我工作,包括验证检查。所以错误必须是在你的页面/在你的项目的其他地方。下面的图片显示了它的运行,我在btnRegister_Click事件上设置了一个断点,当我在填写完所有必需的字段后按下按钮时,它会击中这个断点。

我的代码运行的例子

UseSubmitBehavior = false没有错

微软表示:

使用UseSubmitBehavior属性指定Button控件是使用客户端浏览器的提交机制还是使用ASP. js的提交机制。. NET回发机制。默认情况下,此属性的值为true,从而使Button控件使用浏览器的提交机制。如果指定为false,则ASP。. NET页面框架将客户端脚本添加到页面中,以将表单发送到服务器。

https://learn.microsoft.com/en us/dotnet/api/system.web.ui.webcontrols.button.usesubmitbehavior?view=netframework - 4.8

浏览器使用表单标签和分组,就像MVC-5一样默认=true,因为大多数程序员在ASP.NET中使用MVC。

你正在使用ASP。. NET按钮事件,而不是表单事件。因此,UseSubmitBehavior=false是正确的设置。

我的问题是在我为另一个母版页创建了一个母版页之后开始的。我使用UseSubmitBehavior="false"但是要给每个按钮添加很多工作。为了使它工作,我需要在顶部母版页的表单中添加novalidate,如下所示

<form id="form1" runat="server" novalidate> 

现在可以用了

相关内容

最新更新