Comment faire des listes dans un modèle de vue? + notifications de données
Je suis en utilisant asp.net mvc 3, annotations de données et auto mappeur.
Je veux avoir tous mes annotations sur les propriétés de mon point de vue modèle, une fois les propriétés de validation-je utiliser auto mappeur de carte dans mon domaine d'objet.
J'ai un viewmodel qui a des propriétés que je veux avoir une collection de depuis je veux générer une table à partir d'eux. Je tiens également à les utiliser plus tard pour l'utiliser comme un formulaire pour ajouter des lignes dans cette table.
Alors, que dois-je faire? Comment dois-je prendre ces propriétés et de faire une collection?
public class UserViewModel()
{
[Required()]
public string UserName = {get; set;}
[Required()]
public string FirstName = {get; set;}
[Required()]
public string LastName = {get; set;}
}
Je veux utiliser ces propriétés pour générer ma table et être utilisé pour un.
La seule chose que je peux penser à est de faire ce
public class AddUserViewModel()
{
[Required()]
public string UserName = {get; set;}
[Required()]
public string FirstName = {get; set;}
[Required()]
public string LastName = {get; set;}
}
public class UserViewModel()
{
public List<User> Users {get; set;}
public AddUserViewModel {get; set;}
public UserViewModel()
{
Users = new List<Users>();
}
}
Donc en gros, j'ai comme modèle de vue qui est incluse dans une autre viewmodel qui contient une liste d'Utilisateurs(mon modèle de domaine)
Que la façon dont j'utilise mon modèle de domaine pour générer la table et mon AddUserViewModel pour mon ajout des utilisateurs.
Semble un peu redondant, donc je ne suis pas sûr si il ya une meilleure façon.
Modifier
J'ai quelque chose comme ce
var viewModel = new UserViewModel();
List<Users> users= UserService.GetAllUsers();
viewModel = Mapper.Map<Users, UserViewModel>(users);
return View("Index", viewModel);
J'ai aussi essayé
var viewModel = new UserViewModel();
List<Users> users= UserService.GetAllUsers();
viewModel.AddUserViewModel = Mapper.Map<Users, AddUserViewModel>(users);
return View("Index", viewModel);
Edit 2
J'ai fait, et cela compile mais j'ai cette erreur
SomeViewModel viewModel = new SomeViewModel ();
List<User> users= userService.GetAllUsers();
viewModel.UserViewModel = Mapper.Map<List<User>, List<UserViewModel>>(users);
return View("Index", viewModel);
Trying to map Domain.User to ViewModels.UserViewModel.
Missing type map configuration or unsupported mapping.
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.
source d'informationauteur chobo2
Vous devez vous connecter pour publier un commentaire.
Pourquoi voulez-vous retourner une liste d'objets de domaine dans votre modèle de vue? Ce n'est pas ce que les modèles de vue sont censés être. Vue des modèles de référence seulement d'autres modèles de vue. Donc, vous avez une belle
UserViewModel
qui représente un utilisateur. Maintenant, vous avez besoin de travailler avec plusieurs utilisateurs dans votre point de vue, donc, soit vous passez unIEnumerable<UserViewModel>
ou si vous avez besoin de quelques autres propriétés de la conception d'un modèle de vue pour cette:et maintenant, votre contrôleur de l'action pourrait ressembler à ceci:
Maintenant à l'intérieur de votre point de vue, vous pouvez simplement utiliser un modèle d'affichage pour cette
Users
propriété (Html.DisplayFor(x => x.Users)
) pour afficher une liste d'entre eux.Mise à JOUR:
Après avoir vu votre mise à jour voici comment procéder en termes de bonnes pratiques:
J'ai aussi utilisé un AutoMap attribut dans une exemple de projet qui pourrait simplifier votre code:
Cet attribut sera exécuté automatiquement après que le contrôleur de l'action et avant l'affichage est rendu et AutoMapper de remplacer le modèle avec le modèle de vue.