ASP.NET更新面板中包含错误摘要的jQuery Validator

时间:2011-03-30 20:41:56

标签: jquery asp.net ajax updatepanel jquery-validate

我想知道是否有人可以帮我解决一个一直困扰我一段时间的问题。

我想在页面的更新面板中包含jQuery验证和错误摘要。但是我发现当错误摘要div在更新面板中时,在第一次回发之后,摘要不再显示 - 但是当我不设置条件时,jQuery仍在验证表单并阻止回发。

澄清一下,我遇到以下情况:

  1. 首次加载页面,尝试在未完成详细信息的情况下提交页面 - >阻止回发,并按预期显示错误摘要。

  2. 填写姓氏和姓氏字段,点击提交 - >页面已正确提交到服务器。

  3. 现在将forename或surname字段留空,然后点击提交 - >页面不会回发到服务器,但不会向用户显示错误摘要。

  4. 填写姓名和姓氏字段 - >页面正确回发

  5. 如果您在更新面板之外移动错误摘要div(div class="error-container"),则页面将按预期工作。不幸的是,我无法用我的设计做到这一点。

    我想知道是否有人遇到过这个问题,以及你是否找到了解决方法?

    要重新创建我的问题,您可以使用以下代码:

    TestValidator.aspx

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="TestValidator.aspx.vb" Inherits="TestValidator" %>
    

                                                       

                  
                                                   用名字:                 
                    姓:                 
                                                      

                    $(document).ready(function () {
    
                        load();
    
                        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
                            load();
                        });
    
                    });
    
                    function load() {
    
                        $("#<%= Me.Page.Form.ClientId %>").validate({
                            errorLabelContainer: $("ul", $('.error-container')),
                            wrapper: 'li'
                        });
                    }
    
                    function checkForm() {
                        return $("#<%= Me.Page.Form.ClientId %>").valid();
                    }
    
    
                </script>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
    

    TestValidator.aspx.vb

    Partial Class TestValidator
    Inherits System.Web.UI.Page
    
    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
        Me.btnSubmit.Text = "Submitted at: " & Now.ToString
    End Sub
    

    结束班

    由于 大卫

1 个答案:

答案 0 :(得分:0)

这就是我使用jQuery函数在updatepanels中运行每个页面加载的方法:

// Attach our single function that will call all of the functions 
// we want to run OnLoad to the Sys.Application.add_load handler.

if (Sys != undefined && Sys.Application) { 
    Sys.Application.add_load(callOnLoadFunctions); 
} else { 
    window.onload = callOnLoadFunctions; 
}

function callOnLoadFunctions() {

    // Add all the functions to be called

    load();            // your method
    function1();       // some other function
    function2();       // another function

}

我将所有j放在页面底部,这通常在我的jQuery和插件引用后立即在外部js文件中引用。