Возможно ли сделать что-то подобное в ASP.NET MVC-контроллере?Можно ли передавать классы между контроллерами в ASP.NET MVC?
public ActionResult Index(CustomADT adt)
{
...
}
И вы пройдете в классе от другого контроллера, когда вы нажмете на ссылку. Или можно только обходить строки?
Edit:
Немного больше разработка. Скажем, у меня есть следующие иерархии классов:
public class Area
{
public string Name { get; set; }
public ICollection<Building> Buildings { get; set; }
}
public class Building
{
public string Name { get; set; }
}
Так Area
содержит список Buildings
. Теперь у меня два контроллера: AreasController
и BuildingsController
. Оба имеют метод Index()
. То, что я хотел бы сделать это, когда этот URL будет перемещаться к:
Это будет список всех областей. Затем, когда вы идете к этому URL:
Это будет список всех зданий для области с ID 1. В BuildingsController
, я получаю идентификатор как межд, а затем использовать его для найти правильную площадь, например:
public ActionResult Index(int areaId)
{
var area = areaRepository.GetById(areaId);
return View(area.Buildings);
}
Теперь это кажется довольно неуклюжим для меня. AreaId должен быть получен как int, тогда я должен снова попасть в репозиторий, чтобы получить фактический объект Area
. Есть ли способ, что я могу сделать это вместо того, чтобы:
public ActionResult Index(Area area)
{
return View(area.Buildings);
}
И не попал в репозиторий снова и снова получить объект, который уже был создан экземпляр? Я склоняюсь к нулю из-за того, как работает HTTP (вы не можете поместить объект в URL-адрес), но, возможно, у кого-то есть аккуратный трюк.
Кажется, вы пытаетесь решить проблему, которая не описана в вашем вопросе. Что это за история вопроса? – spender
Не много фона, на самом деле. Во всех обучающих программах, которые я видел, они передают только строки и ints (которые только что передаются в ints) между контроллерами, например, когда вы нажимаете на ссылку. Это очень похоже на работу HTTP, но не столько на то, как работает программирование. Поскольку контроллеры - это просто классы, мне было интересно, есть ли способ передать классы между контроллерами, хотя теперь, когда я думаю об этом, я не думаю, что это возможно, потому что вы делаете HTTP-запрос, который затем вызывает контроллер. –
«И не снова попадайте в репозиторий и снова возвращайте объект, который уже был создан» ... Уже где? Если действие вашего контроллера не будет выглядеть так, что будет? (Как вы намекаете, безгражданный характер HTTP означает, что там действительно ничего нет * вне вашего собственного кода. Несмотря на поведение ModelBinder.) –