2009-09-30 10 views
1

Pas vraiment sûr si le titre reflète ce que je suis en train d'essayer d'atteindre ...ASP.NET MVC éléments d'entité dynamique

J'ai une vue qui est utilisé pour créer un enregistrement (facture) sur la même page I aimerait être en mesure d'ajouter des lignes à la facture de façon dynamique ou comment cela est réalisé. Je ne suis pas sûr de savoir comment faire cela avec MVC et j'espère que quelqu'un peut me diriger dans la bonne direction.

Cheers, Daniel

Répondre

0

Je ferais ça avec AJAX. Le cycle de vie serait:

  1. Afficher le formulaire de facture pour sa création: vous ne pouvez pas ajouter des lignes à encore, car il est pas enregistré et donc il n'a pas d'objet persistant attaché à encore
  2. Enregistrer la facture : rechargez le formulaire. Maintenant, vous pouvez commencer à ajouter des lignes
  3. Lorsque vous ajoutez une ligne, vous invoquez la InvoiceItem/Créer action via Javascript en lui transmettant le numéro de facture et toutes les données restantes qui doivent être remplies
  4. Lorsque les retours d'action AJAX, vous rechargent la partie de la page qui rend les éléments de facture (en appelant InvoiceItem/index/action et rendre ses résultats), de sorte que vous refléter les changements récents

Pour créer ou modifier l'élément, vous pouvez utiliser un popup javascript comme lightbox, qui rendra la page plus nette.

J'ai mis en œuvre ceci pour les pièces jointes, et fonctionne très bien, et est très propre.

0

Vous pouvez utiliser WebGrid Helper. C'est conçu pour ce genre de choses. Voici un exemple de code pour une liste d'ordres, mais vous pouvez facilement le modifier pour obtenir une liste d'éléments de ligne de facture.

@{ 
    var grid = new WebGrid(canPage: true, rowsPerPage: 20, canSort: true, ajaxUpdateContainerId: "grid_Orders"); 
    grid.Bind(Model.Orders, rowCount: Model.TotalOrders, autoSortAndPage: true); 
    grid.Pager(WebGridPagerModes.All); 
    @grid.GetHtml(htmlAttributes: new { id = "grid_Orders" }, 
     columns: grid.Columns(
      grid.Column(columnName: "OrderNo", header: "Order No"), 
      grid.Column(columnName: "TotalAmountDisplay", header: "Amount", format:@<div style="text-align:right"> R @item.TotalAmountDisplay</div>, canSort: false 
    )); 
} 

J'ai le téléavertissement et le tri, que vous n'auriez probablement pas sur une facture. C'est un bon contrôle.