Вот упрощение моих реальных моделей в ASP.NET MVC, которое, я думаю, поможет сосредоточиться на проблеме:
Допустим, у меня есть два объекта домена:
public class ObjectA
{
public ObjectB ObjectB;
}
public class ObjectB
{
}
У меня также есть представление, которое позволит мне создать новый ObjectA и которое включает в себя выбор одного ObjectB из списка возможных ObjectB.
Я создал новый класс для украшения ObjectA этим списком возможностей, я думаю, это действительно моя модель представления.
public class ObjectAViewModel
{
public ObjectA ObjectA { get; private set; }
public SelectList PossibleSelectionsForObjectB { get; private set; }
public ObjectAViewModel(ObjectA objectA, IEnumerable<Location> possibleObjectBs)
{
ObjectA = objectA;
PossibleSelectionsForObjectB = new SelectList(possibleObjectBs, ObjectA.ObjectB);
}
}
Теперь, каков наилучший способ создания моего представления и контроллера, чтобы позволить пользователю выбрать ObjectB в представлении, а затем заставить контроллер сохранить ObjectA с этим выбором ObjectB (ObjectB уже существует и сохранен)?
Я попытался создать строго типизированное представление типа ObjectAViewModel и связать Html.DropDownList с Model.PossibleSelectionsForObjectB. Это хорошо, и я могу выбрать объект просто отлично. Но я пытаюсь вернуть его обратно в контроллер.
Попытка решения 1:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(ObjectAViewModel objectAViewModel)
Эта проблема заключается в том, что свойство objectAViewModel.ObjectA.ObjectB имеет значение null. Я думал, что DropDownList, связанный с этим свойством, обновит модель, когда пользователь выберет это в представлении, но это не по какой-то причине.
Попытка решения 2:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(ObjectA objectA)
Эта проблема заключается в том, что свойство ObjectA.ObjectB имеет значение null. Опять же, я подумал, что, возможно, выбор DropDownList обновит это.
Я также пытался использовать метод UpdateModel в каждом из приведенных выше решений, но безуспешно. У кого-нибудь есть какие-либо идеи? Я предполагаю, что мне не хватает привязки или чего-то еще ...
Спасибо!