Asp net mvc 4 modèle de liaison avec la méthode post
im la recherche d'un moyen (s'il en est un) de faire le modèle de processus de liaison de travailler avec une Liste d'objets, la méthode post.
Je peux facilement afficher la liste. Mais quand il s'agit pour l'utilisateur de télécharger un "Bien" avec une méthode post je ne peux pas faire le cadre de lier chaque élément de la liste correctement. Vous pouvez voir la page de la partie où j'essaie de faire des étiquettes et les zones de texte est commenté, parce que je reçois des exceptions, donc je suppose que im faire de mal et je ne peux pas trouver un moyen de télécharger, un nombre variable de paramètres sur mon modèle.
C'est le Modèle:
public class BienModel
{
[Required]
[Display(Name = "Nombre del Bien.")]
public String Nombre { set; get; }
public List<Atributo> Atributos { set; get; }
}
public class Atributo
{
[Required]
public String nombre { set; get; }
[Required]
public String valor { set; get; }
public Atributo(){}
public Atributo(String n, String v){
this.nombre=n;
this.valor=v;
}
}
Et c'est sur cette page:
@using (Html.BeginForm()) {
<fieldset>
<legend>Publicar bien form.</legend>
<ol>
<li>
@Html.LabelFor(m => m.Nombre)
@Html.TextBoxFor(m => m.Nombre)
@Html.ValidationMessageFor(m => m.Nombre)
</li>
@*@for (int i = 0; i < Model.Atributos.Count;i++ )
{
@Html.Label(Model.Atributos[i].nombre)
@Html.TextBoxFor(m => m.Atributos[i].valor)
@Html.ValidationMessageFor(m => m.Atributos[i].valor)
}*@
</ol>
<input type="submit" value="Publicar!" />
</fieldset>
}
Et ce le contrôleur
public ActionResult PublicarBien()
{
//Pido a la logica los atributos
BienModel b = new BienModel();
b.Atributos = new List<Atributo>();
b.Atributos.Add(new Atributo("Atributo1", ""));
b.Atributos.Add(new Atributo("Atributo2", ""));
b.Atributos.Add(new Atributo("Atributo3", ""));
b.Atributos.Add(new Atributo("Atributo4", ""));
return View(b);
}
[HttpPost]
public ActionResult PublicarBien(BienModel b)
{
try
{
if (ModelState.IsValid)
{
//se da de alta el bien
return RedirectToAction("Index", "Home");
}
}
catch(Exception ex){
ModelState.AddModelError("",ex.Message);
}
return View(b);
}
OriginalL'auteur Cristiano Coelho | 2013-04-14
Vous devez vous connecter pour publier un commentaire.
Votre code semble très bien. Si le contrôleur de l'action que vous postez prend un
BienModel
comme paramètre d'action puis de liaison devrait fonctionner correctement:Vous pouvez également jeter un oeil à la
article suivant
à propos de la norme de la convention dans ASP.NET MVC pour la liaison à une liste.Aussi, actuellement, vous avez seulement un champ de saisie pour le
valor
de la propriété. Lenombre
de la propriété ne dispose pas d'une zone de saisie correspondante de sorte que vous n'obtiendrez jamais de sa valeur de retour. Si vous voulez que cela se produise, vous pouvez utiliser un champ caché:Sur la ligne de votre code en êtes-vous de ces exceptions? Est-il à l'intérieur de l'action POST? Ou peut-être à l'intérieur de la vue qui a été rendu par la suite? Il est impossible de vous aider si vous ne fournissez pas toutes les informations sur les problèmes que vous rencontrez.
J'ai ajouté le code du contrôleur. Exception est levée ici: @Html.Étiquette De Modèle.Atributos[i].nombre) lorsque j'appuie sur le bouton envoyer.
Bien sûr que vous obtiendrez de cette exception. Avez-vous même pas lu ma réponse? Vous n'avez jamais envoyé de la valeur de la
nombre
propriété de votre contrôleur de l'action parce que vous n'avez pas une zone de saisie correspondante. Maintenant, lisez ma réponse avec plus de soin et d'attention pour le champ caché j'ai inclus pour rendre cette valeur étant envoyé à l'action de contrôleur:@Html.HiddenFor(m => m.Atributos[i].nombre)
.Je vois, ça a fonctionné avec le champ caché maintenant 🙂 en outre, pouvez-vous me dire quelle est la différence entre "@Html.LabelFor(x => x.Atributos[i].valor, Modèle.Atributos[i].nombre)" et "@Html.Étiquette De Modèle.Atributos[i].nombre)" ? Depuis je ne veux afficher le nombre d'attribut
OriginalL'auteur Darin Dimitrov