在模态对话框中显示CustomValidator

时间:2014-07-16 20:05:31

标签: c# javascript asp.net

我的ValidationSummary显示在模态对话框中。这很好。

但是,我的代码隐藏执行一些数据库查找,并将带有CustomValidator的消息添加到我的ValidationSummary。

在我开始在对话框中显示ValidationSummary之前,这工作正常。但是现在当CustomValidator无效时,它不会显示在ValidationSummary对话框中。

当其他字段无效时,对话框会出现,但不会出现来自代码隐藏的CustomValidator消息。

以下是在页面无效时显示对话框的代码:

<script type="text/javascript">
    function WebForm_OnSubmit() {
        if (typeof (ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) {
            $("#modal_validationSummary").modal('show');
            return false;
        }
        return true;
    }
</script>

验证摘要代码:

<div class="modal modal-danger" id="modal_validationSummary" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">                
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">Invalid Login</h4>
            </div>
            <div class="modal-body clearfix">

                <asp:ValidationSummary ID="LoginValidationSummary" runat="server" 
                ValidationGroup="LoginGroup" HeaderText="<div class='validationheader'>Please address the issues below</div>" 
                CssClass="validationsummary" DisplayMode="BulletList"/>

            </div>
            <div class="modal-footer">                    
                <button type="button" class="btn btn-default btn-clean" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

我的代码隐藏添加了CustomValidator:

CustomValidator cv = new CustomValidator();
cv.IsValid = false;
cv.ErrorMessage = "Login not found. Please try again.";
cv.ValidationGroup = "LoginGroup";
this.Page.Validators.Add(cv);

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

所以事件的顺序是:你回发,添加验证器,页面渲染,验证摘要不显示错误?

在什么时候显示验证摘要?如果它在您的初始回发之前,那么您的验证消息将无法显示,因为验证阻止您回发,并且直到回发之后才会进行验证。

CustomValidator可能还有一个问题没有添加到Controls集合中,但我不确定。

ETA:一点点研究强化了我的信念,即弹出式ValidationSummary窗口仅适用于客户端验证。你的是服务器端。您可以将CustomValidator函数作为客户端验证程序,同时仍在服务器上执行工作,但您需要:

  1. 定义客户端验证功能;
  2. 在该客户端功能中执行AJAX调用;
  3. 在标记中声明您的CustomValidator。 (您仍然可以动态添加它,但它会在您的初始渲染中添加,并且您必须将其添加到Controls集合中。)
  4. 无论如何,这是它的浓缩版本。