Como você ignorar / persistem valores em MVC quando a sua visão de modelo não tem como muitos campos como seu modelo de domínio?

StackOverflow https://stackoverflow.com/questions/1274575

Pergunta

Eu tenho um site onde eu estou usando FluentNHibernate e Asp.net MVC. I ter uma visão de edição que permite ao utilizador editar 8 das 10 propriedades para que ficha (objecto). Quando você enviar o formulário e os vínculos modelo, os campos de dois un editáveis ??voltar no-modelo vista como cadeias vazias ou como valores DateTime padrão dependendo do tipo de propriedade.

Porque eu também estou usando AutoMapper para mapear meu ver-modelo para a minha Entidade Domínio, eu não posso simplesmente carregar uma nova cópia do meu objeto de banco de dados e definir manualmente as 2 propriedades ausentes. Qual é a melhor maneira de manter os campos que eu não quero editado?

Uma maneira que faz o trabalho é persistir os valores nos campos de entrada oculto no meu View. Isso funciona, mas sente bruta. I apreciar quaisquer recomendações. Existe uma maneira em meu AutoMapper para configurar essa funcionalidade desejada?

UPDATE: Ok, então eu acho que eu não estou tentando ignorar os campos, estou tentando ter certeza de que eu não persistem valores nulos ou string vazia. Ignorando os campos em AutoMapper faz exatamente isso, eles são ignorados e são nulos quando eu tentar mapeá-los antes Saved ao meu repositório.

Foi útil?

Solução

O asp.net MVC DefaultModelBinder é extensível, e você pode substituí-lo para criar o seu próprio esquema de ligação. Mas isso vai envolver mais trabalho do que dois "campos de entrada oculto", que, no meu ponto de vista, não é tão grave.

Outras dicas

Você pode dizer AutoMapper ignorar as 2 propriedades:

Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());

Possível pergunta relacionada.

Você pode usar a sobrecarga AutoMapper.Map que também aceita TEntity?!

entity = Mapper.Map(viewmodel, entity);

Enquanto você não tem as propriedades em seu viewmodel, não vai alterar os valores na sua entidade. Leva a entidade que está sendo passado e aplica-se apenas as propriedades da parte de trás viewmodel para a entidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top