我正在使用一个确认窗口,如果用户在弹出窗口中单击“确定”,它将向数据库添加新值。此外,我必须在此之前验证具体标准。我有按钮和文本框,文本框包含必填字段验证器。因此,如果我单击按钮,则此验证器将首先触发。
我将在此文本框中输入一个数字并按添加,它将从数据库中获取与此数字对应的名称值,如果找到名称,则应询问确认“是否要添加此名称?”如果找不到名称,那么它应该只弹出一个提示“找不到名字”。如果数字值小于6,那么它将显示另一个弹出窗口“数字无效”。我这样做了如下。
ASP.NET
<asp:TextBox ID="text_add" runat="server" MaxLength="6"></asp:TextBox>
<asp:RequiredFieldValidator ID="required_add_" ControlToValidate="text_add" ErrorMessage="Required" runat="server">Required</asp:RequiredFieldValidator>
<asp:Button ID="button_add" runat="server" Text="Add" OnClientClick="Confirm()" OnClick="button_add_Click" />
的JavaScript
<script type = "text/javascript">
function Confirm() {
if (Page_ClientValidate()) {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
if (confirm("Do you confirm?")) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
}
}
</script>
C#
protected void button_add_Click(object sender, EventArgs e)
{
if (text_add.Text.Length < 6)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Number not valid!')", true);
}
else
{
//fetch name from DB
if (//name found)
{
string confirmValue = Request.Form["confirm_value"];
if (confirmValue == "Yes")
{
//add the name
}
}
else
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Name not found!')", true);
}
}
}
这里发生的事情就是每当我在文本框中输入一个数字并单击按钮时,即使数字小于6位数,也会先执行Confirm()函数,如果我输入6位数且名称不是在数据库中找到相同的方式执行Confirm()函数。如果我输入少于6位的数字,则首先出现确认框,然后出现“数字无效”的提示。如何满足条件时,如何触发confirm()函数。我只想在按钮按下事件进入if (//name found)
条件时才触发confirm()函数。
修改
我已从按钮中删除OnClientClick
,然后将C#代码更改为以下
protected void button_add_Click(object sender, EventArgs e)
{
if (text_add.Text.Length < 6)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Number not valid!')", true);
}
else
{
//fetch name from DB
if (//name found)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "confirm", "Confirm();", true);
string confirmValue = Request.Form["confirm_value"];
if (confirmValue == "Yes")
{
this.AddData(sender, e);
}
}
else
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Name not found!')", true);
}
}
}
protected void AddData(object sender, EventArgs e)
{
// add data
}
我已经创建了一个seperte函数来添加数据。我已添加ScriptManager以打开确认框并删除OnClientClick in按钮。现在当我按下按钮时,只有满足所有条件时才会打开确认框。但是当我在确认框中按OK时没有任何反应。不执行AddData函数。
答案 0 :(得分:0)
将确认功能更改为:
function Confirm() {
if (Page_ClientValidate() &&
document.getElementById('text_add').value.length >5) {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
if (confirm("Do you confirm?")) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
}
else return false;
}
并改变
onClientClick=Confirm();
到此:
onClientClick= return Confirm()
避免在6长度文本下提交。
答案 1 :(得分:0)
你的帖子背后必须有一个隐藏字段,表明它在第一篇文章后面或在确认之后:
:-/
并更改您的代码:
<asp:HiddenField ID="isReadyForSave" runat="server" Value="false"/>
并将javascript confirm()函数更改为:
protected void button_add_Click(object sender, EventArgs e)
{
if(isReadyForSave.Value == "true" && Request.Form["confirm_value"] == "yes")
{
AddData();
isReadyForSave.Value = "false";
return;
}
if (text_add.Text.Length < 6)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Number not valid!')", true);
}
else
{
//fetch name from DB
if (//name found)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "confirm", "Confirm();", true);
isReadyForSave.Value = "true";
}
else
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Name not found!')", true);
}
}
}