2017-02-02 1 views
0

J'utilise la bibliothèque de classes pour mes modèles et crée mes contrôleurs dans la zone maintenant je veux utiliser la validation à distance mais ça ne marche pas, en fait ce n'est pas rendu.MVC Remote Validation non rendu

mon modèle dans la bibliothèque de classe modèles

[System.ComponentModel.DataAnnotations.RegularExpression(@"(?=.*[a-zA-Z0-9]).{4,20}$", ErrorMessage = "error")] 
[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "error")] 
[System.Web.Mvc.Remote("UserNameExist","AdminUser","Admin",ErrorMessage="error")] 
public string UserName { get; set; } 

mon contrôleur dans la zone Administrateur

[HttpPost] 
public JsonResult UserNameExist(string UserName) 
{ 
    using (DataBaseContext dbContext = new DataBaseContext()) 
    { 
     var user = dbContext.Users.SingleOrDefault(current => current.UserName == UserName); 
     return Json(user == null); 
    } 
} 

aussi on a ajouté jquery et jquery.validation et jquery.validate.unobtrusive et on a ajouté ce à mon webconfig

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

Mise à jour

rendu html est:

<input class="form-control directionEn valid" data-val="true" data-val-regex="error" data-val-regex-pattern="(?=.*[a-zA-Z0-9]).{4,20}$" data-val-required="error" id="UserName" name="UserName" placeholder="User Name" type="text" value=""> 

il est l'attribut pas pour la validation à distance

Voir l'utilisateur:

@model Models.User 
@section Scripts 
{ 
    <script src="~/Scripts/jquery.validate.min.js"></script> 
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 
} 
<div class="row"> 
    <div class="col-lg-6 col-lg-offset-3 col-md-6 col-md-offset-3"> 
     <div class="form-group"> 
      <a class="btn btn-success" href="/Admin/AdminUser/List">List</a> 
     </div> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-lg-6 col-lg-offset-3 col-md-6 col-md-offset-3"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"> 
       <h4>Add New User</h4> 
      </div> 
      <div class="panel-body"> 
       @using (Html.BeginForm("Add", "AdminUser", null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
       { 
        @Html.Raw(System.Web.HttpUtility.HtmlDecode((Html.ValidationSummary(true, "", htmlAttributes: new { @class = "alert alert-danger" }) ?? (object)"").ToString())) 

        <div class="form-group"> 
         <label> 
          UserName 
         </label> 
         @Html.TextBoxFor(model => model.UserName, htmlAttributes: new { @class = "form-control directionEn", @placeholder = "User Name" }) 
         @Html.ValidationMessageFor(model => model.UserName, "", htmlAttributes: new { @class = "validationError" }) 
        </div> 

       } 
      </div> 
     </div> 
    </div> 
</div> 

ce qui ne va pas dans mon code ???

+0

Ce qui est rendu? (montre le html actuel étant généré). Et vous devriez utiliser '[Remote (" UserNameExist "," AdminUser "," Admin ", ErrorMessage =" erreur ")]' (se référer [surcharges] (https://msdn.microsoft.com/fr-fr/library /system.web.mvc.remoteattribute.remoteattribute(v=vs.118).aspx#M:System.Web.Mvc.RemoteAttribute.)) –

+0

Il n'y a rien de mal avec le code que vous avez montré (il génère les 'données correctes -val-remote- * 'attributs pour moi). Quelque chose que vous ne nous avez pas montré à l'origine du problème. –

+0

Je pense que l'utilisation de la bibliothèque de zone ou de classe pour les contrôleurs et les modèles font mal, je ne sais pas comment y remédier –

Répondre

0

Tout d'abord Supprimer HttpPost de votre contrôleur. Je ne pense pas RemoteValidation Travaux sur HttpPost

public JsonResult UserNameExist(string UserName) 
{ 
    using (DataBaseContext dbContext = new DataBaseContext()) 
    { 
     var user = dbContext.Users.SingleOrDefault(current => current.UserName == UserName); 
     return Json(user == null); 
    } 
} 

deuxième Dans votre modèle, je ne pense pas qu'il y ait l'utilisation de l'administrateur Paramètre

[System.ComponentModel.DataAnnotations.RegularExpression(@"(?=.*[a-zA-Z0-9]).{4,20}$", ErrorMessage = "error")] 
[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "error")] 
[System.Web.Mvc.Remote("UserNameExist","AdminUser",,ErrorMessage="error")] 
public string UserName { get; set; } 

Aussi je considère que vous avez un message de validation d'affichage

@Html.TextBoxFor(i => i.UserName) 
@Html.ValidationMessageFor(i => i.UserName) 

Vous pouvez également mettre debbuger sur la fonction UserNameExist et vérifier que la fonction est appelée ou non.

Mon travail Fiddler: https://dotnetfiddle.net/dlME8p

+0

J'ai ajouté l'affichage de l'utilisateur en question –

+0

Avez-vous essayé ma solution? –

+0

ouais, mais ne fonctionne pas –