asp.net mvc displayFor не показывает значение дочерней сущности - PullRequest
1 голос
/ 18 марта 2012

Я новичок, поэтому думаю, что моя проблема как-то тривиальна.

Я создал простую БД с CodeFirst.У меня есть сущность с именем Person и другая с именем Location.Person имеет свойство ForeignKey с именем LocationId и другое свойство типа Location для справочных целей.

Я создал представление, в котором есть форма, с помощью которой я могу создавать новые Person записи.

Одним из полей формы является DropDownList для «Местоположения» человека.Он принимает значение Id и присваивает его свойству LocationId, равному Person.

Это представление ссылается на действие create Controller, которое получает Person в качестве аргумента и создает привязку к полям формы со свойствами person.Затем он выполняет SaveChanges() в DBContext и перенаправляет на другое Действие с именем details с указанным «Идентификатором».

Details делает find на полученном идентификаторе и отправляетresult (Person) для представления для представления.

Вот моя проблема:
Я пытаюсь отобразить текст Location of конкретного «Person», который я передал, и ничего не получаю.Я делаю это:

@Html.DisplayFor(model => model.Location.LocationValue)

Модель, конечно же, «человек».Почему я не получаю никакого значения для этого?

Вот код:

   public class Person
    {
        public int PersonId { get; set;
        public string LocationId { get; set; }
        ...
        public virtual Location Location { get; set; }
     }

     public class Location
        {

           public int LocationId { get; set; }
           public string LocationValue { get; set; }

           public virtual ICollection<Person> Persons { get; set; }
         }

    public ActionResult Detailes(int id)
    {
        Person person = db.Persons.Find(id);

        return View(person);
    }

    [HttpPost]
    public ActionResult AddPerson(Person person)
    {
        if (ModelState.IsValid)
        {
            db.Persons.Add(person);
            db.SaveChanges();   
            return RedirectToAction("Detailes", new {id = person.PersonId});
        }  
        return View(GetAddPersonViewModel());
     }

Модель здесь - это модель представления для формы

    @Html.DropDownListFor(model => model.Person.LocationId, Model.LocationsList)

И снова, представление представления «детали»:

     @Html.DisplayFor(model => model.Location.LocationValue)

Спасибо.

1 Ответ

0 голосов
/ 18 марта 2012

Это может произойти, если вы не указали никакой конфигурации для сопоставления отношений между человеком и местоположением.Вот пример класса конфигурации

public class LocationConfiguration : EntityTypeConfiguration<Location>
    {
        public LocationConfiguration()
        {
            HasKey(a => a.Id);
            HasMany(location => location.Persons).WithOptional(person => person.Location).
               HasForeignKey(person => person.LocationId);
        }
    }

и добавьте эту конфигурацию в ваш контекст следующим образом

public class YourContext : DbContext
    {

       // your DBSets and contructors, etc


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new LocationConfiguration());            
            base.OnModelCreating(modelBuilder);
        }


    }

С уважением

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