Я пытаюсь сохранить одну из моих моделей в базе данных. С учетом моделей:
public class Foo {
public int Id { get; set; }
public string Name { get; set; }
public virtual Bar Something { get; set; }
}
public class Bar {
public int Id { get; set; }
public string Name { get; set; }
}
public class FooPageModel {
public Foo F { get; set; }
public List<SelectListItem> Bars { get; set; }
}
В моем контроллере у меня есть:
public ActionResult Add(){
var bars = ... // get all bars from db context
var barsList = new List<SelectListItem>();
barsList.AddRange(bars.Select(b => new SelectListItem {
Text = b.Name,
Value = b.Name
}));
var model = new FooPageModel
{
Bars = barsList
};
return View("Add", model);
}
Теперь для представления (строго типизировано в FooPageModel):
<%: Html.DropdownListFor(f => f.F.Bar, Model.Bars) %>
Представление отображается хорошо, со значениями, которые я ожидаю, но когда я отправляю форму страницы, я получаю исключение NullReferenceException (на строке представления, вставленной выше, до того, как действие на контроллере будет когда-либо достигнуто). Я подумал, может быть, если я изменил код моего контроллера на:
var model = new FooPageModel
{
F = new Foo(),
Bars = barsList
}
Однако и это не помогает. Я полагаю, что я мог бы переписать FooPageModel, чтобы он представлял собой просто список строк информации, которую я хочу, но кажется избыточным дублировать логику модели; Я довольно новичок в CTP, так что, может быть, так оно и есть?
Мне удалось закодировать нечто подобное для ComplexType (модель адреса), и у меня не было проблем. Если трассировка стека будет полезна, дайте мне знать, и я опубликую ее. Заранее спасибо.