Afficher le modèle IEnumerable & lt; & gt; la propriété revient null (non contraignant) de la méthode post?
J'ai un modèle de vue qui contient un Produit de type de classe et un IEnumerable< Produit > type de. Sur le post, le premier niveau du produit objet de revient lié à partir de ce dernier alors que le produit enum est de retour null.
Pourquoi le IEnumerable< Prouduct> propriété de ne pas se lier à mon modèle de vue par la poste? Thx!
Modèles:
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public class ProductIndexViewModel
{
public Product NewProduct { get; set; }
public IEnumerable<Product> Products { get; set; }
}
public class BoringStoreContext
{
public BoringStoreContext()
{
Products = new List<Product>();
Products.Add(new Product() { ID = 1, Name = "Sure", Price = (decimal)(1.10) });
Products.Add(new Product() { ID = 2, Name = "Sure2", Price = (decimal)(2.10) });
}
public List<Product> Products {get; set;}
}
Vue:
@model ProductIndexViewModel
@using (@Html.BeginForm())
{
<div>
@Html.LabelFor(model => model.NewProduct.Name)
@Html.EditorFor(model => model.NewProduct.Name)
</div>
<div>
@Html.LabelFor(model => model.NewProduct.Price)
@Html.EditorFor(model => model.NewProduct.Price)
</div>
<div>
<input type="submit" value="Add Product" />
</div>
foreach (var item in Model.Products)
{
<div>
@Html.LabelFor(model => item.ID)
@Html.EditorFor(model => item.ID)
</div>
<div>
@Html.LabelFor(model => item.Name)
@Html.EditorFor(model => item.Name)
</div>
<div>
@Html.LabelFor(model => item.Price)
@Html.EditorFor(model => item.Price)
</div>
}
}
Contrôleur:
public class HomeController : Controller
{
BoringStoreContext db = new BoringStoreContext();
public ActionResult Index()
{
ProductIndexViewModel viewModel = new ProductIndexViewModel
{
NewProduct = new Product(),
Products = db.Products
};
return View(viewModel);
}
[HttpPost]
public ActionResult Index(ProductIndexViewModel viewModel)
{
//???? viewModel.Products is NULL here
//???? viewModel.NewProduct comes back fine
return View();
}
source d'informationauteur JaJ
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas à l'aide de votre expression lambda correctement. Vous devez accéder à la liste des Produits à travers le modèle. Essayez de le faire comme ceci:
Modifier
Contrôleur:
Modèle
Vue:
Travis réponse permettra de régler le problème. Voici une autre approche à l'aide de EditorTemplates
Vous pouvez utiliser un
Editor template
pour afficher les Produits et il fonctionne parfaitement.1) Créer un Dossier appelé "EditorTemplates" sous votre avis/dossier d'Accueil
2 ) Ajouter une vue appelée "
Products
" à l'intérieur.Ajoutez ce code à ce point de vue
et dans votre fenêtre Principale, vous pouvez appeler cela de l'Éditeur de modèle comme celui-ci