Comment ajouter des erreurs de validation dans la validation de la collection asp.net mvc?
À l'intérieur de mon contrôleur de l'action que j'ai le code suivant:
public ActionResult GridAction(string id)
{
if (String.IsNullOrEmpty(id))
{
//add errors to the errors collection and then return the view saying that you cannot select the dropdownlist value with the "Please Select" option
}
return View();
}
Mise à JOUR:
if (String.IsNullOrEmpty(id))
{
//add error
ModelState.AddModelError("GridActionDropDownList", "Please select an option");
return RedirectToAction("Orders");
}
Mise à JOUR 2:
Voici mon code mis à jour:
@Html.DropDownListFor(x => x.SelectedGridAction, Model.GridActions,"Please Select")
@Html.ValidationMessageFor(x => x.SelectedGridAction)
Le Modèle se présente comme suit:
public class MyInvoicesViewModel
{
private List<SelectListItem> _gridActions;
public int CurrentGridAction { get; set; }
[Required(ErrorMessage = "Please select an option")]
public string SelectedGridAction { get; set; }
public List<SelectListItem> GridActions
{
get
{
_gridActions = new List<SelectListItem>();
_gridActions.Add(new SelectListItem() { Text = "Export to Excel", Value = "1" });
return _gridActions;
}
}
}
Et voici mon contrôleur de l'action:
public ActionResult GridAction(string id)
{
if (String.IsNullOrEmpty(id))
{
//add error
ModelState.AddModelError("SelectedGridAction", "Please select an option");
return RedirectToAction("Orders");
}
return View();
}
Rien ne se passe! Je suis totalement perdue sur ce coup!
Mise à JOUR 3:
Je suis maintenant en utilisant le code suivant, mais encore la validation n'est pas de tir:
public ActionResult GridAction(string id)
{
var myViewModel= new MyViewModel();
myViewModel.SelectedGridAction = id; //id is passed as null
if (!ModelState.IsValid)
{
return View("Orders");
}
Mise à JOUR 4:
$("#linkGridAction").click(function () {
alert('link grid action clicked');
$.get('GridAction/', { SelectedGridAction: $("#SelectedGridAction").val() }, function (result) {
alert('success');
});
});
Et le Contrôleur se présente comme suit:
//OrderViewModel has a property called SelectedGridAction.
public ActionResult GridAction(OrderViewModel orderViewModel)
{
return View();
}
Mise à JOUR 5: la Validation n'est pas de tir:
public ActionResult GridAction(OrderViewModel orderViewModel)
{
if (!ModelState.IsValid)
{
return View("Orders", orderViewModel);
}
return View();
}
OriginalL'auteur johndoe | 2011-01-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un modèle de vue:
et puis:
Mise à JOUR:
Après les centaines de commentaires sur ma réponse que je ressens dans la nécessité de fournir un travail complet exemple:
Comme d'habitude de commencer avec un modèle d'affichage:
Un contrôleur:
et enfin la vue:
il ne devrait pas l'être. Si vous utilisez la méthode helper suivante:
<%= Html.DropDownListFor(x => x.Id, Model.Items, "-- please select --") %>
pour générer votre liste déroulante aucune valeur ne sera envoyé et la validation fonctionnera automatiquement. Aussi, il est plus logique d'envoyer une chaîne vide lorsque l'utilisateur n'a pas choisi quelque chose plutôt que d'une valeur factice.Je dois également ajouter que la page n'est pas soumise (pas de bouton submit) mais une action qui est appelée par le biais d'un lien, et c'est pourquoi la validation n'est pas d'être viré!
à partir de la validation de point de vue, elle n'a pas d'importance la façon dont la demande est envoyée. L'important, c'est d'envoyer un
id
paramètre le long de la demande. Si ce paramètre est vide validation échouera => c'est comme si l'utilisateur n'a pas choisi n'importe quelle valeur dans la liste déroulante.Pouvez-vous s'il vous plaît vérifier ma mise à jour 2?
OriginalL'auteur Darin Dimitrov
Utilisation
ModelState.AddModelError()
et de sortie à la vue comme:
ModelState.AddModelError()
".Où puis-je obtenir la Clé de? J'ai suivantes:
<span class="field"> @Html.EditorFor(model => model.ClientID, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.ClientID,"", new { @class = "text-danger" }) </span>
ce qui serait la clé?Si vous connaissez les biens que vous travaillez, vous pouvez compter sur DataAnnotations ou essayer d'ajouter une erreur pour "ClientID"
OriginalL'auteur hunter
Au sujet de votre mise à jour #3, je soupçonne que c'est parce que vous êtes en réalité de l'affectation de la valeur, c'est juste une chaîne vide (Obligatoire est la vérification de la valeur null).
Vous voulez faire avoir ceci:
Votre meilleur pari serait d'effectuer une validation personnalisée (vous aurez probablement envie de vérifier la clé est dans la liste, etc)
Edit: correction d'une erreur dans le code oublié de clôture ")"
OriginalL'auteur Chance