Si vous voulez permettre à l'utilisateur d'ajouter un nouvel élément de formulaire sur le côté client, vous devez utiliser javascript pour mettre à jour le DOM avec le nouvel élément que vous voulez ajouter. Pour lister les éléments existants, vous pouvez utiliser des modèles d'éditeur. Mélanger ces 2 vous donnera une forme dynamique. Ce qui suit est une implémentation de base. Pour utiliser les modèles d'éditeur, nous devons créer un modèle d'éditeur pour le type de propriété. Je ne ferais pas cela pour le type string
qui ressemble plus à un type générique. Je créerais une classe personnalisée pour représenter l'élément de liste.
public class Item
{
public string Name { set; get; }
}
public class ShoppingList
{
public int ShoppingListId { get; set; }
public string Name { get; set; }
public List<Item> ListItems { get; set; }
public ShoppingList()
{
this.ListItems=new List<Item>();
}
}
Maintenant, créez un répertoire appelé EditorTemplates
sous ~/Views/YourControllerName
ou ~/Views/Shared/
et créer une vue appelée Item.cshtml
qui aura le code ci-dessous
@model YourNameSpaceHere.Item
<input type="text" asp-for="Name" class="items" />
maintenant dans votre contrôleur GET, créez un objet de la ShoppingList et envoyer à la vue.
public IActionResult ShoppingList()
{
var vm = new ShoppingList() { };
return View(vm);
}
maintenant dans la vue principale, Tout ce que vous avez à faire est d'appeler la méthode EditorFor
@model YourNamespace.ShoppingList
<form asp-action="ShoppingList" method="post">
<input asp-for="Name" class="form-control" />
<div class="form-group" id="item-list">
<a href="#" id="add">Add</a>
@Html.EditorFor(f => f.ListItems)
</div>
<input type="submit" value="Create" class="btn btn-default" />
</form>
Le balisage a une balise d'ancrage pour ajouter de nouveaux éléments.Ainsi, lorsque l'utilisateur clique dessus, il faut ajouter un nouvel élément d'entrée avec la valeur d'attribut name dans le format ListItems[indexValue].Name
$(function() {
$("#add").click(function (e) {
e.preventDefault();
var i = $(".items").length;
var n = '<input type="text" class="items" name="ListItems[' + i + '].Name" />';
$("#item-list").append(n);
});
});
Ainsi, lorsque l'utilisateur clique, il ajoute un nouvel élément d'entrée avec le nom correct du DOM et quand Si vous cliquez sur la liaison du modèle de bouton d'envoi, cela fonctionnera correctement car nous avons la valeur d'attribut de nom correcte pour les entrées.
[HttpPost]
public IActionResult ShoppingList(ShoppingList model)
{
//check model.ListItems
// to do : return something
}
Si vous souhaitez précharger des éléments existants (pour l'écran d'édition, etc.), Tout ce que vous devez faire est de charger la ListItems propriété et le modèle de l'éditeur prendra soin de rendre les éléments d'entrée pour chaque élément avec le nom correct valeur d'attribut.
public IActionResult ShoppingList()
{
var vm = new ShoppingList();
vm.ListItems = new List<Item>() { new Item { Name = "apple" } }
return View(vm);
}
utilisez jQuery pour ajouter un élément d'entrée au DOM. – Shyju
le problème que je reçois avec c'est, quand je soumets le formulaire les éléments nouvellement ajoutés ne sont pas envoyés avec le soumettre. @Shyju – conterio
il fait aussi longtemps que nous les noms correspond à ce que le classeur modèle recherche. Partagez le code que vous avez essayé – Shyju