2010-02-24 6 views
2

Je suis un débutant avec ASP.NET MVC et essaye de lier une liste déroulante avec des données d'une base de données. Je fais une application de calculateur de paquets d'ordinateur, essentiellement les utilisateurs peuvent sélectionner les composants qu'il/elle veut dans son paquet d'ordinateur à partir d'une liste déroulante, puis envoyer la commande dans un e-mail. Les composants doivent provenir d'une base de données.Liste déroulante ASP.NET MVC

Je ne suis pas familier avec le modèle MVC, donc je n'ai pas tout à fait compris dans quel dossier devrais-je mettre quelle partie de l'application. En ce moment, je

-Contrôleurs:

--HomeController

-Modèles

--HomeRepository

--IHomeRepository

--database. dbml (en ce moment je n'utilise qu'une table appelée prod UCT et les informations que j'ai besoin à partir de là est

PRODUCT_DESCRIPTION et PRODUCT_PRICE)

-Vue

--home

---- Index

---- ... etc ...

J'ai réussi à obtenir tous les produits de la table des produits dans une liste à puces un Et affichez-le sur la page Index. Ainsi, mon HomeRepository crée un datacontext à partir de Database.dbml. Il existe également une méthode ListAll() publique IList publique dans laquelle la phrase de recherche est écrite. IHomeRepository a seulement

public interface IHomeRepository 
{ 
    IList<product> ListAll(); 
} 

D'une certaine manière cela fonctionne et pendant un moment j'étais très heureux. J'ai essayé de remplir une liste déroulante à la page d'index comme ceci:

<% foreach (product m in (IENumerable)ViewData.Model 
{ 
    Html.DropDownList("processor"m new[] { 
    new SelectedListItem { Text = m.product_description, Value m.product_description }, "Select a processor") 
    } 
} 

Mais il montre seulement autant liste déroulante que je reçois des produits de la phrase de recherche et montrer qu'un seul résultat dans chaque liste.

Que dois-je faire? Ou comment devrais-je construire ce genre d'application? Peut-être que Web Forms devrait être plus facile à faire cette application simple, mais je dois essayer d'utiliser les méthodes de programmation eXtreme, y compris le développement piloté par les tests et j'ai compris que cela n'est pas possible avec Web Forms. Eh bien, cette XP est une autre histoire ...

Merci beaucoup.

+0

Bon article à ce sujet ici: http://www.277hz.co.uk/Blog/Show/7/image-uploading-in-asp-net-mvc –

Répondre

4

En supposant que votre action ressemble à ceci:

public ActionResult Index() 
{ 
    IEnumerable<Product> products = Repository.ListAll(); 
    return View(products); 
} 

Et la vue correspondante est fortement typée à IEnumerable<Product>:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<YourNamespace.Product>>" %> 

vous n'avez pas besoin d'utiliser une instruction foreach pour générer la liste déroulante :

<%= Html.DropDownList("processor", Model.Select(p => new SelectListItem { 
    Text = p.product_description, 
    Value = p.product_id 
})) %> 
0

Merci pour votre réponse , Darin. J'ai essayé mais ça n'a pas marché. Mais en essayant j'ai trouvé un autre exemple qui a fonctionné. Maintenant, mon index ressemble:

[...] 
    <% using (Html.BeginForm()) { %> 
     <table> 
      <tr> 
      <td>Processor</td> 
      <td><%= Html.DropDownList("lstProcessor1", new SelectList((IEnumerable)ViewData["Processor1List"], "product_price", "product_description")) %></td> 
      </tr> 
      <tr> 
      <td>Total Amount</td> 
      <td>0,00 €</td> 
      </tr> 
     </table> 
     <input type="submit" value="Submit" /> 
    <% } %> 
    [...] 

Et le début de HomeController:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using MvcApplication1.Models; 

namespace MvcApplication1.Controllers 
{ 
    [HandleError] 
    public class HomeController : Controller 
    { 
     // Connect database 
     DB50DataContext _ctx = new DB50DataContext(); 

     // GET: /Home/ 
     public ActionResult Index() 
     { 
      // Search: Processors 
      var products = from prod in _ctx.products 
          where prod.product_searchcode == "processor1" 
          select prod; 

      ViewData["Processort1List"] = products; 

      return View(); 
     } 

Je ne suis pas à l'aide des dépôts en ce moment et avec ce genre de solution, je comprends que je peux écrire des requêtes à l'intérieur du public ActionResult Index() pour obtenir d'autres composants, mais je pense que ce n'est pas comme ça que ça devrait être? Ces requêtes de base de données ne devraient-elles pas être ailleurs? L'application aura seulement Home-dossier, toutes les pages sont à l'intérieur.

J'ai aussi un autre problème avec les listes déroulantes: Est-il possible d'afficher product_description AND product_price dans la propriété Text? J'ai essayé le genre de choses "product_description + product_price" mais bien sûr ça ne marche pas.

Questions connexes