Remote Attribute Validation not firing in Asp.Net MVC
Asked Answered
C

4

8

Here is my model code

public class BlobAppModel
{
   [Required(ErrorMessage="Please enter the name of the image")]
   [Remote("IsNameAvailable","Home",ErrorMessage="Name Already Exists")]
   public string Name { set; get; }           
}

And in my controller I have

public JsonResult IsNameAvailable(string Name)
{
   bool xx= BlobManager.IsNameAvailable(Name);
   if (!xx)
   {
      return Json("The name already exists", JsonRequestBehavior.AllowGet);
   }
   return Json(true, JsonRequestBehavior.AllowGet);
}

And in my data I have

public static bool IsNameAvailable(string Name)
{
   var test = "";
   using (var x = new BlobTestAppDBEntities())
   {
       try
       {
            test=x.BlobApps.Where(m => m.Name == Name).FirstOrDefault().Uri;
            if (test != null)
               return false;
            else
               return true;
       }
       catch (Exception)
       {
          return true;
       }
   }
}

In my view I have added the scripts too

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {

    <td> @Html.Label("Name:") 
                 @Html.TextBoxFor(m => m.Name)
                 @Html.ValidationMessageFor(m=>m.Name)</td>}

But remote validation is not firing at all..Is there any problem with my code?

Cota answered 30/10, 2013 at 11:28 Comment(1)
Similar question is another page: https://mcmap.net/q/1322349/-mvc5-viewmodel-validation-remoteBrandenburg
E
13

Make sure that your validation method is decorated with [AllowAnonymous] attribute ([HttpPost] may be required too).

[AllowAnonymous]
public JsonResult IsNameAvailable(string Name)

Also a tip: use browser's developer tools (F12 button in major browsers) to see the status of Json request.

Eskill answered 25/7, 2014 at 9:31 Comment(2)
thanks, its work for me, i just add [AllowAnonymous] attribute at top of the action it was missing.Jacquelinejacquelyn
Thanks a lot. it worked for me. I forgot that I added [Authorize] on controller level and I am accessing this for [Remote] on registration page which should be accessed anonymously. Saved my lot of time. Thanks again :)Josefinejoseito
S
5

you are missing the jquery.unobtrusive-ajax.js file in your view please add that and try it again.

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

if you don't have it get in from the nuget

nuget link http://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/

Singultus answered 30/10, 2013 at 12:15 Comment(6)
are you seeing any errors on the console? and also please remove the min files and try it with the actual files. it is easy to debug.Singultus
No I am not getting any errors ..I have even added the actual files now..But still there is no changeCota
try adding the jquery.unobtrusive-ajax.js before jquery.validate.js clear the cache before trying again.Singultus
Done even doing that but still it doesn't fire :(Cota
When you make changes to the javascript included sometimes I find the cache will need clearing in my web browser. Also, use the developer tools of your browser (I use chrome) and look at the url generated on the remote validation attribute on the input element you assigned it to. Make sure that relative address is correct.Halvah
Thank you for this answer. It just solved my problem.Affluence
G
3

These settings need to go in web.config too:

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Geiger answered 26/11, 2013 at 21:0 Comment(0)
D
3

I know this is a little late, If you are using Razor syntax, I found that in addition to everything you did you also need:

@Scripts.Render("~/bundles/jqueryval")
Dewberry answered 5/5, 2016 at 6:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.