У меня есть сайт asp.net-mvc, и я использую nhibernate.Я столкнулся с проблемой, когда мой пользовательский интерфейс должен добавить дочерние элементы к родительскому объекту, но этот родительский объект еще не вставлен (и поэтому не имеет идентификатора)
Вот подробности:
У меня есть базовая страница сведений, которая представляет собой форму (набор элементов управления вводом), которые представляют свойства объекта (в данном случае Project объекта), где есть текстовое поле дляИмя, текстовая область для описания и т. Д..
A (упрощенный вид) Проект объект выглядит следующим образом
public class Project
{
public string Name;
public string Description;
public List<Project> Dependencies;
public int Id;
}
я снова использую этот экран для добавления нового Проекта (где всеэлементы управления пусты при запуске
я снова использую этот экран для редактирования существующего проекта (где я загружаю все элементы управления с сервера с заданным идентификатором проекта)
проблема теперь заключается вПользовательский интерфейс для добавления и удаления Зависимости элементов в свойство Dependency Project (список). Это немного сложно, но я не могу просто использовать обычный список множественного выбора, потому что должен бытьпоиск зависимости (поскольку их тысячи)
Пользовательский интерфейс, который я решил использовать для отображения списка зависимостей, является jqGrid.
Когда вы нажимаете кнопку «Добавить» в jqgrid, появляется небольшое диалоговое окно для добавления зависимости
, когда вы выбираете проект, затем он вызывает сервер для добавлениязависимость от проекта, закрыть всплывающее окнои затем обновите «Сетка зависимостей», чтобы показать вам последний список проектов зависимостей.
Вот мой код для добавления зависимостей:
public ActionResult AddDepedency(Dependency dependency)
{
var project = GetProjectFromRepository(dependency.ProjectId);
var projectDependency = GetProjectFromRepository(dependency.DependencyProjectId);
project.Dependencies.Add(projectDependency);
this.Repository.Save(project);
this.Repository.Commit();
}
, кстати, вот связьв моем классе ProjectMap для быстрой проводки nhibernate:
HasMany(x => x.Dependencies).AsBag().Inverse().Cascase.AllDeleteOrphan().Fetch.Select().BatchSize(80);
Это прекрасно работает, когда я делаю это для экрана редактирования, КАК У меня уже есть идентификатор проекта.
, но я не могу понятьКак заставить это работать на экране проекта ADD, потому что люди будут пытаться добавить зависимость к проекту ДО того, как сам исходный проект будет сохранен, поэтому у него еще нет идентификатора .
я должен использовать какой-то кеш сессии для временного хранения этого списка?поэтому, когда я на самом деле иду, чтобы зафиксировать проект для вставки, в этот момент я прикрепляю все зависимости в то время к основному проекту после успешной вставки проекта?
Один вариант, это то, что я просто не могподдерживает добавление зависимостей на странице проекта ADD и поддерживает его только на странице проекта EDIT, но кажется, что это будет раздражать пользователей.
Кто-нибудь сталкивался с этой проблемой раньше и может предложить какие-либо предложения?