2
votes

Asp.net MVC: les champs supplémentaires ne sont pas obligatoires pour la validation à distance

J'ai une liste de modèles et je souhaite effectuer une validation à distance.

Modèle :

<input type='text' name='test[0].prop1' />

Le nom généré par MVC pour chaque élément est comme ci-dessous:

[System.Web.Mvc.Remote("Method", "Controller", HttpMethod = "POST", AdditionalFields = "prop2,prop3", ErrorMessage = "Error")]
 public string prop1 { get; set; }

Pour cette raison , les valeurs ne sont pas liées aux paramètres. J'ai pris l'aide de ce message . Maintenant, j'obtiens la valeur de 'prop1' mais toujours 'prop2' et 'prop3' ne sont pas liés.

Edit: J'utilise BeginCollectionItem pour afficher les éléments de la liste.

Toute aide ou suggestion serait formidable.

Merci d'avance.


1 commentaires

Qu'avez-vous comme paramètre pour la méthode POST distante?


3 Réponses :


0
votes

Par défaut, toutes les propriétés du modèle sont nulles sauf la propriété principale,

Si vous avez d'autres propriétés pour valider la liaison, incluez-les.

public ActionResult CheckThings([Bind(Prefix = "Prop1OrSomethigElse")]string prop1, [Bind(Prefix = "Prop2OrSomethigElse")]string prop2, [Bind(Prefix = "Prop3OrSomethigElse")]string prop3)
{
.....
}

Si votre méthode d'action dosnt accepte le modèle et vous lui passez des champs séparés, utilisez

public ActionResult CheckThings([Bind(Include = "prop2,prop3")] Model model)
{
.....
}


1 commentaires

Comment puis-je spécifier le test [0] comme préfixe?



0
votes

Si la méthode distante prend un objet (comme paramètre) qui contient ses sous-éléments, ils doivent être mappés automatiquement, par exemple:

@using (Html.BeginForm("Index", "Account"))
{
  for (int i = 0; i < Model.Items.Count; i++)
  {
    @Html.TextBoxFor(m => Model.Items[i].Prop1)
    @Html.TextBoxFor(m => Model.Items[i].Prop2)
    @Html.TextBoxFor(m => Model.Items[i].Prop3)
  }
}
public class Stuff
{
  public List<Item> Items { get; set; }
}

public class Item
{
  [Remote(action:"Validate", controller: "Account", 
      HttpMethod = "POST", 
      ErrorMessage = "Error",
      AdditionalFields = "Prop2,Prop3")]
  public string Prop1 { get; set; }

  public string Prop2 { get; set; }
  public string Prop3 { get; set; }
}

entrez la description de l'image ici


4 commentaires

Aide-t-il? S'il vous plaît, faites-moi savoir.


Non, ce n'est pas le cas. J'utilise nuget.org/packages/BeginCollectionItem pour rendre les éléments de la liste. C'est pourquoi votre réponse n'aide pas. S'il vous plaît laissez-moi savoir s'il existe un autre moyen


Et vous n'avez pas mentionné le classeur de modèle personnalisé que vous utilisiez, jusqu'à maintenant. C'est pourquoi c'est difficile à dire. Merci de nous en avoir informé.


Ouais, désolé pour les inconvénients causés



0
votes

J'ai repris l'idée de ce message et je l'ai corrigé en modifiant la méthode à distance dans Fichier jquery-validate.js comme ci-dessous:

remote: function(value, element, param) {
 ....
  param = typeof param === "string" && {url:param} || param;
  ....

  for (var property in param.data) {
    if (param.data.hasOwnProperty(property)) {
        param.data[property.substr(property.lastIndexOf(".") + 1)] = param.data[property];
      }
    }
   //ajax call


0 commentaires