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?

1

4 Answers 4

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.

Sign up to request clarification or add additional context in comments.

2 Comments

thanks, its work for me, i just add [AllowAnonymous] attribute at top of the action it was missing.
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 :)
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/

6 Comments

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.
No I am not getting any errors ..I have even added the actual files now..But still there is no change
try adding the jquery.unobtrusive-ajax.js before jquery.validate.js clear the cache before trying again.
Done even doing that but still it doesn't fire :(
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.
|
3

These settings need to go in web.config too:

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

Comments

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")

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.