Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

asp.net 4.5 webforms model binding : client side validation supported?

I'm a huge fan of asp.net 4.5 webforms model binding using data annotations.

ascx:

     <asp:FormView ItemType="Contact" runat="server" DefaultMode="Edit" 
     SelectMethod="GetContact" UpdateMethod="SaveContact">
        <EditItemTemplate>   

              <asp:ValidationSummary runat="server" ID="valSum" />

              Firstname: <asp:TextBox  runat="server"  ID="txtFirstname" Text='<%#: BindItem.Firstname %>' /> 


              Lastname: <asp:TextBox  runat="server"  ID="txtLastname" Text='<%#: BindItem.Lastname %>' />

              Email:  <asp:TextBox  runat="server"  ID="txtEmail" Text='<%#: BindItem.Email %>' />     

              <asp:Button ID="Button1"  runat="server" Text="Save" CommandName="Update" />
        </EditItemTemplate>   
    </asp:FormView>

.cs:

    public void SaveContact(Contact viewModel)
    {
        if (!Page.ModelState.IsValid)
        {
            return;
        }            
    }              

    public Contact GetContact() 
    {
         return new Contact();
    }

Model:

    public class Contact
    {
        [Required]
        [StringLength(10, ErrorMessage="{1} tis te lang")]   
        public string Firstname { get; set; }

        [Required]
        [StringLength(10)]
        public string Lastname { get; set; }

        [Required]
        [EmailAddress]       
        public string Email { get; set; }

    }

Question:

Is client side validation supported out-of-the-box in webforms like in MVC? Or should we rely on third party libraries (DAValidation). Is it possible to port the goodness of Html.EnableClientValidation() to webforms ?

Regards,

Bart

like image 617
BGR Avatar asked Nov 12 '13 09:11

BGR


1 Answers

As we have found in our ASP.NET WebForms projects, there is no overall useful reuse of the Model's validation attributes for client side validation.

For example, a contact data model, with various properties like name, email, birthday etc... is not always used the same way. Sometimes it may have some mandatory fields, sometimes not, and even the required input data may differ at various points in the application.

Thus, in our projects, we use both a client side validation implementation, and the model attributes.

The general idea we apply is:

  • On the client side, we want to be as specific as possible, to avoid unnecessary postbacks and to provide the user with immediate, specific responses.
  • On the server side, we apply the model attributes plus more database and business-oriented validation rules and fail not so specifically. Plus, if required, some "inter-property" validation does take place when some fields are dependent from each other.

For the client side, we have chosen the jQuery Validate Plugin (http://jqueryvalidation.org/).

We even have built our own set of controls (that derive from the built-in WebControls), which render various (and even some custom) data rules.

like image 192
Marcel Avatar answered Sep 30 '22 16:09

Marcel