Я новичок в MVC 3 / Razor и работаю над простым сайтом, чтобы изучить основы. Для этого я создал простое представление, которое отображает DropDownList на странице в / Home / SignedInAs.
Логика в моем домашнем контроллере:
public class HomeController : Controller
{
public ActionResult SignedInAs()
{
SignedInAsViewModel siavm = new SignedInAsViewModel();
siavm.SignedInAsOptions = db.GetSignedInAsOptions();
return View(siavm);
}
}
где SignedInAsViewModel является простым:
public class SignedInAsViewModel
{
public SignedInAsViewModel()
{
this.SignedInAsOptions = new List<SignedInAs>();
}
public IEnumerable<SignedInAs> SignedInAsOptions { get; set; }
}
и метод db.GetSignedInAsOptions () возвращает список объектов SignedInAs со свойствами, идентификатором и именем.
А в Views / Home / SignedInAs.cshtml у меня есть:
@model myMVCApp.Views.SignedInAsViewModel
...
@Html.DropDownList("ddlSignedInAs", new SelectList(Model.SignedInAsOptions, "ID", "Name", selectedValue))
...
И список выбора отображается точно так, как и ожидалось, на моей странице в / Home / SignedInAs.
Что я действительно хочу сделать, так это рендерить DropDownList вверху каждой страницы. Итак, я создал частичное представление _SignedInAsPartial:
@model myMVCApp.Views.SignedInAsViewModel
@if (Request.IsAuthenticated)
{
<text><div>@Html.DropDownList("ddlSignedInAs", new SelectList(Model.SignedInAsOptions, "ID", "Name", selectedValue))</div></text>
}
И контроллер, SignedInAsController:
public class SignedInAsController : Controller
{
public ActionResult ShowSignedInAs()
{
SignedInAsViewModel siavm = new SignedInAsViewModel();
siavm.SignedInAsOptions = GetSignedInAsOptions();
return PartialView(siavm);
}
}
(я тоже пробовал return View(siavm)
).
И в моем _Layout.cshtml используется все страницы, которые у меня есть:
@Html.Partial("_SignedInAsPartial")
Попытка загрузки любой страницы теперь приводит к исключению NullReferenceException, и визуальный отладчик останавливается на _SignedInAsPartial.cshtml
Точки останова никогда не попадают в SignedInAsController.
Я явно чего-то здесь не понимаю, и я прочитал все, что смог найти. Но я не могу понять это. Почему список выбора отображается нормально при просмотре страницы, а не при частичном просмотре?