Ошибка типа Razor Proxy.System.Data.Entity.DynamicProxies - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть класс User, а затем другой тип UserSpecial с некоторыми специальными пользовательскими свойствами.Я передаю его в бритву частичному классу метода, чтобы создать форму UserSpecial, которая ожидает объект типа User Special, но я получаю ошибку.

@model User
    @using (Html.BeginForm())
    { 

        @Html.ValidationSummary(true)
        <fieldset>
            @Html.Partial("../UserSpecial/_CreateOrEdit", Model.UserSpecial)
            <p class="submit clear">
                <input type="submit" value="Register" />
            </p>
        </fieldset>
    }
</div>

Ошибка, которую я получаю -

МодельЭлемент, передаваемый в словарь, имеет тип 'System.Data.Entity.DynamicProxies.User_AC9DED50C9495788046D6BFA3B90DDFC6AD2884157CF23C91FCB3B7A55F70B18', но для этого словаря требуется элемент модели типа 'UserSpecial'.

что здесь делают 100 * *1007*1009 * Из моего контроллера я просто передаю текущий пользовательский объект, который я сохранил в состоянии сеанса.

Контроллер -

 public ActionResult Register()
        {
            return View(userRepository.Current);
        }

Здесь Current имеет тип "User"

*Модель 1016 * -
public partial class User
    {
        public User()
        {
        }

        public int UserID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Sex { get; set; }
        public System.DateTime CreateDate { get; set; }
        public string Email { get; set; }
        public string HomeTown { get; set; }
        public short UserType { get; set; }

        public virtual UserSpecial UserSpecial { get; set; }
    }

Декларация модели для _CreateOrEdit равна

@model UserSpecial

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Понятия не имею, что такое userRepository.Current, но кажется, что он неправильно / охотно загружает свойство UserSpecial.Почему вы не используете модели просмотра?Почему вы передаете модели доменных сущностей своим взглядам?Это плохая практика.Вы должны определить модели представлений, которые содержат только те данные, которые требуются вашему представлению, а затем в вашей карте действий контроллера между вашими моделями домена и соответствующей моделью представления, которая будет передана представлению.

0 голосов
/ 31 декабря 2013

Решение этой проблемы довольно простое:

Вы должны просто использовать класс-оболочку (модель представления), как предложил Дарин.

Так, например:

(модель предметной области):

public class MyEntityModel
{
    public int Id { get; set; }
    public String Name { get; set; }
}

=> поместить его во ViewModel (просто глупая оболочка) должно привести к этому

public class MyViewModel
{
    public MyEntityModel MyEntityModel { get; set; }
}

Теперь, в представлении, вы должны иметь возможностьчтобы получить доступ к свойству name, сделав это

<div>
    The entity object's name is "@model.MyEntityModel.Name"
</div>

(обратите внимание, что вы не должны использовать @ model.Name!)

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