web-dev-qa-db-fra.com

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

J'ai utilisé le nouvel ASP.Net MVC 3 RemoteAttribute pour envoyer un appel à distance à une méthode d'action qui avait un seul paramètre. Maintenant, je veux passer un deuxième paramètre en utilisant la propriété AdditionalFields:

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

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

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

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

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

D'autres suggestions? Auparavant, ces champs supplémentaires étaient appelés champs.

Merci,

Beaudetious

30
beaudetious

É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="[email protected]" />
    <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.

59
Darin Dimitrov

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

2
Christian

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

0
Ericyu67