Je Boucler dans un IEnumerable de mon modèle:MVC Html.HiddenFor dans un modèle de passage en boucle de retour au contrôleur
@model IEnumerable<Testing.Models.ProductItem>
@{
ViewBag.Title = "Buy Products";
}
<div class="row">
@foreach (var product in Model)
{
using (Html.BeginForm())
{
@Html.HiddenFor(Model => product)
... More Controls and stuff...
<input type="submit" value="Add To Kart" class="btn btn-info">
}
}
</div>
et soumettre, je veux passer l'instance sélectionnée de mon modèle de retour à mon contrôleur:
[HttpPost]
public ActionResult Index(ProductItem product)
{
... Do Stuff ...
return View();
}
Cependant j'ai essayé quelques petites choses, mais semblent toujours se passer nulle dans le contrôleur ... S'il vous plaît quelqu'un pourrait aider s'il vous plaît me diriger dans la bonne direction?
EDIT
Je ne fait besoin de l'instance de modèle complet que je peux obtenir ce dans le contrôleur de l'ID - donc je l'ai essayé les suivantes:
@model IEnumerable<Testing.Models.ProductItem>
@{
ViewBag.Title = "Buy Products";
}
<div class="row">
@foreach (var product in Model)
{
using (Html.BeginForm())
{
@Html.HiddenFor(Model => product.ID)
@Html.TextBox("qty", "1", htmlAttributes: new { @style = "width: 30px;" })
... More Controls and stuff...
<input type="submit" value="Add To Kart" class="btn btn-info">
}
}
</div>
qui messages à la contrôleur:
[HttpPost]
public ActionResult Index([Bind(Include = "ID")] int? ID, [Bind(Include = "qty")] int? qty)
{
return null;
}
La zone de texte ne fait pas partie du modèle car elle est entrée par l'utilisateur - cette valeur est passée joliment dans l'action Cependant, je reçois toujours une valeur nulle pour l'ID dans le contrôle HiddenFor. Est-ce à voir avec le nom du contrôle? Je ne semble pas pouvoir ajouter un nom au contrôle HiddenFor.
Je sais que cela apporte un éclairage différent sur la question initiale, mais j'espère que vous pourrez toujours aider.
Je prends la note de la BeginForm étant à l'intérieur de la boucle - créer pour chaque élément dans la liste ... Y at-il une alternative facile à cette (notez que je ne l'ai pas encore essayé quoi que ce soit).
Il existe plusieurs problèmes avec votre code. D'abord vous ne pouvez pas lier un objet complexe au contrôle de forme (vous devez lier chaque propriété si le modèle).Et avoir un formulaire pour chaque élément de la collection n'a pas de sens - vous ne pouvez soumettre qu'un formulaire à la fois et dans tous les cas, vous générez des entrées qui n'ont aucun lien avec votre modèle –
Générez vos contrôles de formulaire dans un seul formulaire en utilisant une boucle 'for' ou' EditorTemplate' et soumettez-le tout en une action (référez-vous à [cette réponse] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943)) ou si vous voulez mettre à jour un seul élément à la fois, utilisez ajax ou ayez un lien qui redirige votre vers une page pour l'édition de cet article –
Merci à la fois ... À la lumière de cela, j'ai mis à jour la question passer l'ID au lieu du modèle complet. Si vous étiez en mesure de jeter un coup d'oeil et laissez-moi savoir vos pensées maintenant serait génial. – CJH