Salut,Formulaire à vue de modéliser des problèmes (AutoMapping)
Je construis une application ASP.NET MVC et ont un problème avec le traitement des données.
Un de mes actions ressemble à ceci:
public ActionResult Register(int categoryId, int? filterId)
Cette action instansiate le formulaire d'inscription et dans ce cas, cela signifie pour charger une coutume viewmodel objet avec des données de DB (Entity Framework) et envoyer à la vue fortement typée.
Pour translater l'objet du module à l'objet de vue J'utilise AutoMapper
Lorsque l'utilisateur a modifié les données et cliquez sur soumettre l'action followin sera déclenchée:
[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(ModelViewRegisterFilter filter)
Cette action se déroulera le code suivant:
if(filter.EditingFilter.Id > 0)
adCategoryFilter = Mapper.Map<RegisterFilterItem, AdCategoryFilter>(filter.EditingFilter, filterModel.GetFilter(filter.EditingFilter.Id));
else
adCategoryFilter = Mapper.Map<RegisterFilterItem, AdCategoryFilter>(filter.EditingFilter);
Le filtre adCategoryFilter est une classe de Model (db). Lorsque cela est fait, il ne devrait pas y avoir de problème pour sauvegarder l'objet de modèle d'entité (adCategoryFilter).
Problème 1 J'ai un champ dans la table db caled DisplayCheckBox et est de type Nullable tinyint. Pour représenter ceci j'ai créé un bool Nullable dans mon objet de vue. Lorsque vous utilisez le AutoMapper de traduire à partir du modèle au MODELVIEW je reçois l'exception suivante:
Essayer de carte System.Byte à System.Nullable`1 [[System.Boolean, mscorlib, Version = 4.0. 0,0, Culture = neutre, PublicKeyToken = b77a5c561934e089]]. Utilisation de la configuration de la cartographie pour Biss.Models.Model.AdCategoryFilter à Biss.Views.ViewClasses.RegisterFilterItem propriété Destination: DisplayCheckBox exception de type 'AutoMapper.AutoMapperMappingException' a été levée.
Je cheked la propriété généré de la classe modèle et ressembler à ceci:
Nullable<global::System.Byte>
Problème 2 Lorsque le formulaire est soumis l'objet viewmodel sera rempli de données du formulaire . S'il y a un textBox qui a la valeur "" (string.empty) alors la chaîne sera définie à null.
Le champ db qui représente cette zone de texte est de type nchar (100) et il est généré par l'infrastructure d'entité en une chaîne. Le problème est que automapper essayera de définir la valeur null à la propriété DisplayTextBox sur l'objet de modèle et qui lancera l'exception suivante:
Cette propriété ne peut pas être définie sur une valeur nulle.
Avis de consultation.
En fait, votre point au sujet Automapper est incorrect. Tout ce qu'il doit faire est d'appeler CreateMap avant d'appeler Map. –
rboarman
C'est bizarre. J'ai utilisé AM partout sans avoir à faire quelque chose de spécial. – rboarman
Cela génère de nouvelles questions 1 = Si j'utilise l'attribut Bind et exclut certaines propriétés, comment cela fonctionnera-t-il lors de l'utilisation d'AutoMapper pour mapper le ViewObject à DataModelObject? Je suppose que les données "réelles" de la base de données (DataModelObject) seront remplacées par les propriétés non définies de ViewObject? – Banshee