2011-09-28 5 views
1

Je rencontre un problème lors de la visualisation des données dans mon application MVC2. J'utilise votre configuration d'échafaudage typique, mais lorsque je vois la page d'index ou de détails, je ne vois aucune donnée.Echafaudage MVC2 - impossible de voir les données

Je suis sûr qu'il me manque quelque chose de simple ici car je n'ai pas d'erreurs lors de la compilation ou de l'exécution.

Voici mon modèle (Users.cs):

public class Users 
{ 
    public string UserName { get; set; } 

    [Required(ErrorMessage = "The Customer ID is required.")] 
    public string CustomerID { get; set; } 
} 

Voici les actions contrôleur (UsersController.cs) 2 que la matière:

public class UsersController : Controller 
{ 

    static List<Users> users = new List<Users>(); 

    // 
    // GET: /Users/ 

    public ActionResult Index() 
    { 
     return View(users); 
    } 

    // 
    // GET: /Users/Details/5 

    public ActionResult Details(Users u) 
    { 
     return View(u); 
    } 

} 

Et voici mon point de vue.

Utilisateurs/index.aspx

<table> 
<% foreach (var item in Model) { %> 

    <tr> 
     <td> 
      <%= Html.ActionLink("Edit", "Edit", new { id=item.UserName }) %> | 
      <%= Html.ActionLink("Details", "Details", item)%> | 
      <%= Html.ActionLink("Delete", "Delete", new { id = item.UserName })%> 
     </td> 
     <td> 
      <%= Html.Encode(item.UserName) %> 
     </td> 
     <td> 
      <%= Html.Encode(item.CustomerID) %> 
     </td> 
    </tr> 

<% } %> 

</table> 

<p> 
    <%= Html.ActionLink("Create New", "Create") %> 
</p> 

Utilisateurs/Details.aspx

<fieldset> 
    <legend>Fields</legend> 

    <div class="display-label">UserName</div> 
    <div class="display-field"><%= Html.Encode(Model.UserName) %></div> 

    <div class="display-label">CustomerID</div> 
    <div class="display-field"><%= Html.Encode(Model.CustomerID) %></div> 

</fieldset> 
<p> 
    <%= Html.ActionLink("Edit", "Edit", new { id=Model.UserName }) %> | 
    <%= Html.ActionLink("Back to List", "Index") %> 
</p> 

Toutes les pages se chargent très bien sans erreur, mais aucune donnée est affichée. Si je cours le débogueur la liste d'utilisateurs a 0 entrées. J'utilise SQL Server.

Ma chaîne de connexion est dans mon web.config de la manière typique:

Ma base de données contient déjà des données utilisateur. Il a été généré avec l'outil d'administration de site Web asp.net par défaut, que j'utilise pour l'authentification. Cela fonctionne parfaitement.

Alors qu'est-ce que je fais mal? Toute aide est appréciée et si je dois donner plus d'informations s'il vous plaît faites le moi savoir.

+2

Dans votre 'UsersController', le' List 'est instancié comme une nouvelle liste ()' qui est assez juste, mais n'est jamais rempli (à partir du code donné). Avez-vous omis cette partie? S'il n'a pas été omis, il est probable que vos pages ne contiennent aucune donnée car votre liste d'utilisateurs contient exactement cela; pas de données? Si tel était le cas, lorsque vous naviguez vers '../ Users /', vous ne devriez voir qu'un lien "Créer un nouveau"? – Smudge202

+0

Smudge202 Je suppose que c'est ma réponse alors, comment puis-je le peupler avec les données existantes en utilisant mon modèle? Je vois le lien Créer un nouveau, mais je ne veux pas lire les données existantes. Je ne prévois pas d'avoir le bouton Créer en production car l'authentification crée déjà les utilisateurs. –

+0

Publiera une réponse pour vous expliquant ... – Smudge202

Répondre

1

Votre UserController (comme expliqué dans le commentaire OP) instancie votre liste d'utilisateurs sans données.

Si vous souhaitez des données graines, pensez à modifier la déclaration comme suit:

public class UsersController : Controller 
{ 

    // static List<Users> users = GetSeededData(); - 
    // don't store a list locally, it isn't necessary if you have a database 
    // consider holding the context instead perhaps? 
    protected MyContext context = new MyContext(); 

    // 
    // GET: /Users/ 

    public ActionResult Index() 
    { 
     return View(context.users.ToList()); 
    } 

    // 
    // GET: /Users/Details/5 

    public ActionResult Details(int userId) 
    { 
     return View(context.Users.SingleOrDefault(x => x.UserId.Equals(userId)); 
    } 

} 

Une suggestion rapide au sujet de votre « persistence » (ignorez si vous aimez, juste une pointe amicale) ... Pensez à introduire une couche de persistance . Autrement dit, si vous voulez conserver des données, pensez à les stocker dans une base de données, un fichier XML, etc. Jetez un oeil à here. C'est une excellente ressource sur MVC avec beaucoup d'exemples et de tutoriels, et à mi-chemin dans la section "Modèles" il vous présente Entity Framework qui peut être utilisé pour stocker, récupérer et mettre à jour vos données sur une base de données.

+0

Cela malheureusement ne fonctionnera pas. J'ai déjà une base de données complète de données utilisateur. J'ai besoin de lire ces données, donc je ne peux pas les instancier dans le code. –

+0

Ok Duk, c'est bon. Le bit qui vous manque dans le code récupère vos données de la base de données. Comment communiquez-vous actuellement avec votre base de données? c'est-à-dire le cadre d'entité? Linq à SQL? Un ORM différent? ADO.Net? Je vais passer la méthode de graine ci-dessus à un exemple rapide L2S/EF4 pour vous aider à démarrer – Smudge202

+0

J'utilise ADO.NET. Je réalise mon problème maintenant. Pour une raison quelconque, je pensais que le modèle saurait comment saisir les données sur la base d'être nommé le même que la table et en utilisant la chaîne de connexion. Je réalise que c'est idiot de moi, longue journée je suppose. Merci pour l'aide. –

Questions connexes