0

我有一个不应该为空的文本框,所以我在它旁边放置了一个必需的验证控件。我还有一个javascript 确认框,询问用户是否确定提交信息。

问题是确认首先出现,然后验证才开始。我想反过来。我希望首先进行验证。如果没有更多错误,则询问用户是否确定提交信息。

编辑

这是标记

<asp:LinkButton ID="_lnkAddUpdate" runat="server" CausesValidation="True" OnClientClick = "return ConfirmAddEdit(this.id)"
     CommandName="Update"></asp:LinkButton>

<asp:TextBox ID="_tbLocationName" runat="server" Text= '<%# Eval("LocationName") %>'/>
<asp:RequiredFieldValidator ID="reqLocationName" runat="server" ErrorMessage="Location name cannot be empty string." Text = "*" ControlToValidate = "_tbLocationName" />

这是javascript

function ConfirmActive(id) {
    var action = document.getElementById(id).innerHTML;
    var r = confirm("Are you sure you want to " + action + " this location?");
    if (r == false) {
        return false;
    }
}

感谢您的帮助。

4

2 回答 2

1

我通常这样做的方式是使用以下 javascript ...

var cont = true;
if (typeof (Page_ClientValidate) === "function") {
  cont = Page_ClientValidate();
}
if (cont) {
  cont = window.confirm("are you sure?");
}
return cont;

这将检查 ASP.NET 函数是否可用,如果可用,则运行它...如果有效,则触发确认。最终结果被发送回点击处理程序,以确定是否继续。


更新

给出更多解释:

当您设置OnClientClick属性时,您设置的 javascript 总是首先运行......因此,如果您validator的页面中有任何控件,它们只会在您的 javascript之后运行。这显然不是你想要的。

我的解决方案是在 javascript 之后调用浏览器调用的完全相同的函数,但. 次要的缺点是验证将执行两次(一次由您直接执行,然后在您的函数运行后再次执行)。

function ConfirmActive(id) {
  var cont = true;
  if (typeof (Page_ClientValidate) === "function") {
    cont = Page_ClientValidate();
  }
  if (cont) {
    var action = document.getElementById(id).innerHTML;
    cont = confirm("Are you sure you want to " + action + " this location?");
  }
  return cont
}
于 2012-11-13T18:15:36.283 回答
1

如果没有看到代码,就不可能确定问题出在哪里,但我猜你遇到了两个问题之一。

首先要检查的是您的验证码在您的确认码之前

validate();
confirm();

很容易。第二个,我猜你的实际问题是你正在使用远程验证,所以你想要的不是上面的解决方案,而是让你的确认码成为你的验证码的回调。你如何做到这一点取决于你如何设置验证请求。发布该代码,我们可以帮助您。

于 2012-11-13T18:12:27.690 回答