2008-11-11 12 views
3

J'ai quelques difficultés à saisir certains concepts derrière le framework MVC. Je fais une application très simple qui catégorise les produits.Cadre et liaison de données ASP.Net MVC

L'écran de création utilisera simplement une liste déroulante affichant la liste des catégories, le nom du produit et l'envoi.

Dans une application .Net normale, je répertorierais une liste déroulante de serveur dans le Page_Load, mais dans une application MVC, quel est le meilleur moyen de récupérer mes catégories de la base de données et de les ajouter à la liste déroulante?

(Désolé, ma question est extrêmement noobish mais malheureusement, les ressources sont libres sur MVC, et les exemples sont souvent brisés en raison de changements précoces)

Répondre

4

Je ne sais pas si je comprends totalement, mais si votre page affiche un seul produit et la seule entrée de l'utilisateur est juste Pour sélectionner une catégorie dans une liste déroulante, je peux vous aider (mais je suis aussi un noob!).

Référencer cette page:

http://weblogs.asp.net/scottgu/archive/2008/05/27/asp-net-mvc-preview-3-release.aspx

Vous allez vouloir créer un SelectList dans votre contrôleur pour les catégories (référencement probablement une carte d'identité, et d'afficher un nom). Vous ajoutez ensuite cette SelectList à votre ViewData. Vous pouvez également définir cela comme faisant partie de votre ViewData.Model et le référencer à partir de votre View. À votre avis, vous utilisez le HtmlHelper pour DropDownList qui prend un SelectList en tant que paramètre.

Ce lien ci-dessus devrait le transmettre beaucoup mieux, ceci est juste un résumé rapide. Ce lien est pour l'aperçu 3, mais je pense que tout devrait encore s'appliquer.

0

Vos modèles de récupérer des données, votre présentateur organise des données pour la vue, et la vue contrôles liant votre modèle aux éléments de l'interface utilisateur. Par exemple, voici un modèle pour une LogEvent:

public class LogEvent{ 
    public string Title {get;set;} 
    public string Date {get;set;} 
    public string Message {get;set;} 

    // this is for example only; you would most likely bind directly against the host.GetAllLogs() result 
    public static IEnumerable<LogEvent> RetrieveAllLogs(ILogProvider host){ 
    return from x in host.GetAllLogs() select new LogEvent(x.LogTitle, x.Date, x.Message); 
    } 

Voici le contrôleur qui gère une demande de l'utilisateur pour afficher tous les journaux:

[DependencyPropertyLolJk] 
protected ILogProvider MyLogProvider {get;set;} // set by DI 

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Logs() 
{ 
    return View("Logs", LogEvent.GetAllLogs(MyLogProvider).OrderByDescending(x => x.Date)); 
} 

Et est la vue ici et comment il se lie au modèle:

<!-- header left out for brevity --> 
<table> 
    <thead> 
     <tr> 
      <th> 
       Date 
      </th> 
      <th> 
       Title 
      </th> 
      <th> 
       Message 
      </th> 
     </tr> 
    </thead> 
    <% foreach(var log in ViewData.Model) %> 
    <tr> 
<td><%= log.Date %></td> 
<td><%= log.Title %></td> 
<td><%= log.Message %></td> 
    </tr> 
    <% }; %> 
</table> 

<!-- ... --> 

Donc, vous voyez, vous devez écrire votre code HTML en utilisant le code en ligne. Cela fonctionne bien pour les interfaces utilisateur simples, mais peut être complexe et une corvée quand il s'agit de choses plus complexes, telles que les pagers et les gridviews. Lorsque votre interface utilisateur devient complexe, la meilleure chose à faire est de créer des extensions à la classe HtmlHelper. Voici deux exemples qui montrent comment cela peut réduire la complexité de vos contrôles d'interface utilisateur: HtmlHelper GridView et Pager. J'ai créé des méthodes d'aide similaires, et c'est assez remarquable comment vous pouvez mélanger le code html et inline au sein de lambdas. Maintenant, si le concepteur était seulement capable de formater ce type de code mixte/markup décemment ...

+0

désolé, je voulais seulement dire la partie Databinding (je sais comment MVC est censé fonctionner, je suis bloqué sur les détails de l'implémentation :)) – Luk

Questions connexes