ASP.Net MVC 3 validation on AjaxForm
Asked Answered
P

2

2

I have an ajax form on razor view engine. For validation i use dataanotation classes. Validation work fine when user submit the form, validation messages work fine. The problem is, validation wont work on keyup or blur events.

How can i activate validation without submit on ajaxform(ajax.beginform)

Here is my view code:

@using (Ajax.BeginForm(new AjaxOptions { InsertionMode = InsertionMode.Replace,       
        UpdateTargetId = "employeeDetail", HttpMethod = "Post", OnComplete = "Complete", 
        Confirm = "Confirm?" }))
{
    @Html.TextBoxFor(model => model.Email)
    @Html.ValidationMessageFor(model=>model.Email)
    <span style="float:right"><input type="submit" class="tableGenelButton" id="submitButton" value="Kaydet" /></span>
}

Model:

  [RequiredWithMessage]
  [Display(Name = "E-Mail")]
  public string Email { get; set; }
Pacifier answered 9/5, 2011 at 14:58 Comment(0)
N
3

Update:

Ok, apparently you're using Ajax.BeginForm which uses MicrosoftAjax in stead of jQuery (I didn't realize that before). This one needs some extra work to enable client side validation:

You need

<% Html.EnableClientValidation(); %> 

Somewhere in your page, and also links to MicrosoftAjax.js, MicrosoftMvcAjax.js and MicrosoftMvcValidation.js

Here's a link that might be interesting for you:

ASP.NET MVC Client Side Validation With Ajax.BeginForm


To enable client side validation for a custom validation attribute (I guess [RequiredWithMessage] is one of those), you have to implement the IClientValidatable interface.

Here is an article that explains how to do that:

The Complete Guide To Validation In ASP.NET MVC 3 - Part 2

Nourish answered 9/5, 2011 at 16:20 Comment(5)
The problem is not in custom validation attribute. I also get the same problem when i use default [Required] dataanotation class.Pacifier
@user: [Required] should work out of the box in MVC 3. Make sure you have a setting <add key="ClientValidationEnabled" value="true" /> under appSettings in your web.config file. And of course you also need to have a reference to jquery and jquery.validate and jquery.validate.unobstrusive (in case UnobtrusiveJavaScriptEnabled is true) in your view.Nourish
i did everything you told before. I add all refs. in to layout page also add "ClientValidationEnabled" setting to web.config.Pacifier
Aah, I see now you're using Ajax.BeginForm. I thought you were using Html.BeginForm. I don't have experience with Ajax.BeginForm and client side validation. I know it should work (out of the box) with Html.BeginForm though.Nourish
:D you miss understood me. np thanxPacifier
P
0

Assuming you have client side validation enabled, you will need to call .validate() in the relevant events:

$("#theFormToValidate input").blur(function(){
    $("#theFormToValidate").validate();
});

and

$("#theFormToValidate input").keyup(function(){
    $("#theFormToValidate").validate();
});
Psychoneurosis answered 9/5, 2011 at 15:49 Comment(1)
These should happen automatically... I think the OP is talking about client side validation for his custom validation attribute ([RequiredWithMessage]).Nourish

© 2022 - 2024 — McMap. All rights reserved.