27 votes

Validation à distance dans ASP.Net MVC 3: comment utiliser AdditionalFields dans la méthode d'action

J'ai été en utilisant le nouveau ASP.Net MVC 3 RemoteAttribute pour envoyer un appel distant à une méthode d'action qui n'avaient qu'un seul paramètre. Maintenant je veux passer à un deuxième paramètre à l'aide de la AdditionalFields propriété:

[Remote("IsEmailAvailable", "Users", AdditionalFields = "InitialEmail")]

Où IntialEmail est un champ caché de la vue. L'action ressemble à ceci:

public JsonResult IsEmailAvailable(
            string email,
            string InitialEmail)
{
//etc.
}

Lorsque la vue est rendue, le champ caché est rempli, mais lorsque la méthode d'Action est déclenché à distance, la valeur est une chaîne vide.

J'ai vu d'ailleurs le cas de la sensibilité peut être un problème, j'ai donc veillé à la méthode d'Action est le même cas pour les deux paramètres.

Toutes les autres suggestions? Cette AdditionalFields utilisé pour être appelé Champs.

Merci,

Beaudetious

52voto

Darin Dimitrov Points 528142

Étrange. Ça marche pour moi:

Modèle:

 public class MyViewModel
{
    [Required]
    [Remote("IsEmailAvailable", "Home", AdditionalFields = "InitialEmail")]
    public string Email { get; set; }
}
 

Manette:

 public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }

    public ActionResult IsEmailAvailable(string email, string initialEmail)
    {
        return Json(false, JsonRequestBehavior.AllowGet);
    }
}
 

Vue:

 @model AppName.Models.MyViewModel
@{
    ViewBag.Title = "Home Page";
}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.TextBoxFor(x => x.Email)
    @Html.ValidationMessageFor(x => x.Email)
    <input type="hidden" name="InitialEmail" value="foo@bar.com" />
    <input type="submit" value="OK" />
}
 

IIRC il y avait un bug dans ASP.NET MVC 3 RC2 avec cette validation à distance qui a été corrigé dans le RTM.

2voto

Christian Points 28

Votre champ caché doit être dans le même formulaire que le champ que vous validez (comme c'est le cas dans l'exemple de Darin), sinon la valeur du champ caché ne sera pas envoyée en tant que paramètre à la méthode d'action de validation "public ActionResult IsEmailAvailable (chaîne email, chaîne initialEmail ) "

0voto

Ericyu67 Points 47

La fonction IsEmailAvailable (chaîne e-mail, chaîne initialEmail) doit être définie comme e-mail, identique à celle de la propriété.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X