Доступ к объектам модели - PullRequest
0 голосов
/ 23 марта 2011

У меня есть следующая модель

Модель поездки // Подумайте о классе домена Grails

public long FerryId { set;get; }
public long FromLocationId { set;get; }
public long ToLocationId { set;get; }

public Ferry Ferry { set;get; }
public Location FromLocation { set;get; }
public Location ToLocation { set;get; }

Затем я возвращаю список к просмотру и перебираю поездки:

@foreach (var item in Model) {
    @item.FerryId //displays fine
    @item.Ferry.FerryName //displays fine
    @item.FromLocationId //displays fine
    @item.FromLocation.LocationName //doesn't work
    @item.ToLocationId //displays fine
    @item.ToLocation.LocationName //doesn't work
}

Проблема при попытке получить "item.ToLocation.LocationName" и то же самое для "item.FromLocation.LocationName"

Я не совсем понимаю, почему возвращается Ferry.FerryName, но не остальные.

Я новичок в C # / MVC3 / Razor, но в grails / groovy это не сработает, Какие-нибудь мысли? а дополнительные общие советы? с благодарностью.

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Что значит "не работает"?Есть ли сообщение об ошибке, которое мы можем диагностировать?

Без этого я могу просто сделать обоснованное предположение ... Я предполагаю, что вы используете Entity Framework для извлечения этих объектов модели из базы данных и что FromLocation и ToLocationссылки на другую сущность.Если это так, вам нужно явно указать EF загрузить эти свойства из базы данных перед передачей модели в представление.Это довольно просто ... просто добавьте .Include("FromLocation").Include("ToLocation") к вашему запросу LINQ для извлечения вещей из контекста EF

См. http://msdn.microsoft.com/en-us/library/bb896272.aspx для получения дополнительной информации об этой технике 'нетерпеливой загрузки' и других имеющихся у вас опцияхдля загрузки связанных объектов.

0 голосов
/ 27 марта 2011

Я посмотрел документацию и запрос не был проблемой:

var trips = DB.Trips.Include("FromLocation").Include("ToLocation").ToList();

, но мне пришлось вручную добавлять объекты местоположения для отключения при сохранении:

[HttpPost]
public ActionResult Create(Trip trip)
{
    var fromLocation = DB.Locations.Find(trip.FromLocationId);
    var toLocation = DB.Locations.Find(trip.ToLocationId);
    trip.FromLocation = fromLocation;
    trip.ToLocation = toLocation;
    if (ModelState.IsValid)
    {
        DB.Trips.Add(trip);
        DB.SaveChanges();
        return RedirectToAction("Index");
    }
    else
    {
        return View(trip);
    }
}

итеперь я могу загружать вложенные объекты:

@item.ToLocation.LocationName
@item.FromLocation.LocationName

Меня удивляет то, что в случае объекта Ferry мне не нужно было добавлять его вручную!

0 голосов
/ 23 марта 2011

Мне кажется, что это заставляет меня спросить, каков метод доступа для FromLocation / ToLocation.LocationName? Это публично?

Извините, если это глупый вопрос, но иногда это то, что меня заводит ...

НТН,

\ ^ / i l l

...