Тип объекта Casting в контроллере MVC - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть следующий класс и контроллер (mvc)

Модель пользовательского интерфейса наследует модель БД (ef4.0)

public class RegistrationModel : Model.User
    {
        [Required]
        public string PasswordText { get; set; }
    }   

MVC контроллер

    public ActionResult Create(RegistrationModel registrationModel)
            {
                try
                {
                    Context ctx = new Context();
                    Model.User user = new Model.User();
                    user = (registrationModel as Model.User);
                    user.Password = System.Text.ASCIIEncoding.ASCII.GetBytes(registrationModel.PasswordText); //do encryption later on
...
                    ctx.Customer.Add(registrationModel as Model.User);
                    ctx.SaveChanges();
                }
    }

когда я передаю регистрационную модель пользователю, тип остается регистрационной моделью. Есть ли способ привести ее без копирования всех ее свойств в новый объект пользователя?

                Model.User user = new Model.User();
                user.Active = registrationModel.Active;
                user.Blocked = registrationModel.Blocked;
//...

....

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

правильно. Я была такая же проблема. кажется, что все типы приведения (документ в MSDN здесь: http://msdn.microsoft.com/en-us/library/ms173105.aspx), похоже, не работает в контроллерах MVC.

например:

// IRREGULAR MVC CONTROLLERS BEHAVIOR 
// implicit casting
Model.User user = registrationModelInstance // won't case to base
// explicit casting
Model.User user = (Model.User)registrationModelInstance // won't case to base

В итоге я использовал AutoMapper (аналогично пользовательскому преобразованию для MSDN). должно выглядеть так:

Mapper.CreateMap<RegistrationModel, Model.User>();
Mapper.Map<RegistrationModel, Model.User>(registrationModelInstance);
0 голосов
/ 22 апреля 2011

Как насчет использования AutoMapper .Отлично подходит для автоматического сопоставления данных из моделей для просмотра моделей и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...