Skip to main content

jQuery Validation plugin in ASP.NET Web Forms


I would really like use the jQuery Validation plugin in my ASP.NET Web Forms application (not MVC). I find it easier than adding asp validators everywhere and setting the control to validate field on all of them.



I am just having some issues both when setting the class like this class="required email" which I think has something to do with having a form tag within the main form tag.



I also run into issues when calling the jquery validate using the names which become mangled in an asp control




// validate signup form on keyup and submit
$("#signupForm").validate({
rules: {
username: {
required: true,
minlength: 2
}, },
messages: {
username: {
required: "Please enter a username",
minlength: "username at least 2 characters"
},
}.

.......

<p>
<label for="username">
Username</label>
<input id="username" name="username" />
</p>



because this




<asp:TextBox ID="tbUsername" runat="server"></asp:TextBox>



renders as




<input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" />



and mangles the name. I can get the ClientID using <%=tbUsername.ClientID %> but that doesnt work with ClientName



Has anyone had any success using the jquery validator plugin with asp.net? If so what about using multiple forms much like using seprate validation groups? thanks


Source: Tips4allCCNA FINAL EXAM

Comments

  1. You can checkout the rules add function, but basically here's what you can do:

    jQuery(function() {
    // You can specify some validation options here but not rules and messages
    jQuery('form').validate();
    // Add a custom class to your name mangled input and add rules like this
    jQuery('.username').rules('add', {
    required: true,
    messages: {
    required: 'Some custom message for the username required field'
    }
    });
    });

    <input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" class="username" />


    This way no need to worry about the crappy identifiers generated by the webforms engine.

    ReplyDelete
  2. Here are examples of using the jQuery Validation plugin with WebForms and emulating the concept of validation groups with it. It actually works pretty well once you smooth out a couple issues.

    ReplyDelete
  3. You can check xVal.webForms here: http://xvalwebforms.codeplex.com/

    ReplyDelete
  4. $("#signupForm").validate({
    rules: {
    <%= tbUsername.UniqueID %>: {
    required: true,
    minlength: 2
    }, },
    messages: {
    <%= tbUsername.UniqueID %>: {
    required: "Please enter a username",
    minlength: "username at least 2 characters"
    },
    });

    <asp:TextBox ID="tbUsername" runat="server"></asp:TextBox>

    ReplyDelete
  5. Tested what Darin Dimitrov said and it works perfectly, but if you don't want to set a specific class to each of your fields, you can use jQuery selectors:

    $('form').validate();
    $('input[id$=Username]').rules('add', {
    required: true,
    messages: {
    required: 'Some custom message for the username required field'
    }
    });

    <input name="ctl00$ContentPlaceHolder1$tbUsername" type="text" id="ctl00_ContentPlaceHolder1_tbUsername" />

    ReplyDelete
  6. what about the issue of having a form inside another one?

    ReplyDelete
  7. For SharePoint 2010 I found with loading different usercontrols as views (via ajax) that this worked also if you move your javascript into a library and can't use server tags for the control id's like this e.g #<%= tPhone.ClientID %>

    $('input[id$=tPhone]').rules('add',
    {
    required: true,
    messages:
    {
    required: 'Some custom message for the username required field'
    }
    });


    Further to this if you dynamically load a user control via Ajax then you cannot use $(document).ready you will have to encapsulate the jQuery in a function library if its on the User Control at (server side event) page load its fine but in the scenario its loaded via Ajax with the Update Panel it will not dance, I have not tried loading usercontrols via jQuery yet, this looks heavy and appears to load the whole page albeit perhaps slightly quicker or not. Tests comparing loading techniques showed the Update Panel was as fast and resulted in the same or smaller page sizes than other techniques and basically loaded quicker or much more data as quick or quicker.

    ReplyDelete
  8. A great way to do this is to use:

    <%= textbox.Name %> or <%= textbox.ClientId %> whenever you need to reference a server item.

    i.e.

    var phoneNumb = $('#<%= tPhone.ClientID %>').val();


    or

    $("#signupForm").validate({
    rules: {
    <%= username.Name %>: {
    required: true,
    minlength: 2
    }, },
    messages: {
    <%= username.Name %>: {
    required: "Please enter a username",
    minlength: "username at least 2 characters"
    },
    }.


    .......

    ReplyDelete
  9. http://www.dotnetcurry.com/ShowArticle.aspx?ID=310

    ReplyDelete

Post a Comment

Popular posts from this blog

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex