Я тестирую некоторые понятия в ASP.NET мультишаги MVC (Мастера Стиля) с небольшим приложением, которые позволяют мне организациям записей в базе данных.
Для создания вещей легче у меня есть класс OrganizationFormModelView, который содержит объект класса Организация и свойство под названием ParentOrgList типа SelectList. Единственная цель selectList свойства состоит в том, чтобы использоваться DropDownList.
Я имею, также сериализируют OrganizationFormModelView для получения эффекта Мастера мультишагов.
В моем первом представлении (или первый шаг), я использую dropdownlist помощника для присвоения значения одному из свойство Организации под названием ParentOrganization, который тянет данные ParentOrgList.
...
<% = Html.DropDownList("Organization.ParentOrganization", Model.ParentOrgList)%>
...
В первый раз загрузки страницы, я могу сделать выбор. И, мой выбор отражается в моей объектной модели все время по мастеру' шаги (см. Visual Studio в режиме отладки).
Но, когда любое время, я перенаправляюсь назад к первому представлению (первый шаг), я получаю следующее сообщение об ошибке:
"Объект ViewData с ключевой 'Организацией. ParentOrganization' имеет тип 'Система. Строка', но потребности иметь тип 'IEnumerable'".
Спасибо за помощь
Внимательно изучив свой код, я теперь понимаю, что происходит. OrganizationFormModelView - это класс, который сериализуется, и вот его определение.
[Serializable]
public class OrganizationFormViewModel
{
public Organization Organization { get; set; }
[NonSerialized]
public SelectList ParentOrgList = null;
public OrganizationFormViewModel(Organization organization, SelectList cList)
{
Organization = organization ?? new Organization();
ParentOrgList = pList;
}
}
Из этого я пришел к выводу, что после каждого процесса сериализации для ParentOrgList устанавливается значение null, поэтому мне нужно найти способ переназначить ему значение. Итак, вот что я сделал:
public ActionResult CreateOrganization(string nextButton)
{
//Omitted for brievety
if (formViewModel.ParentOrgList == null)
formViewModel.ParentOrgList = repository.CommuneList;
//Omitted for brievety
}
Я также изменил представление так, что, даже если значение ParentOrgList постоянно переназначается, DropDownList сохраняет выбор пользователя. Итак, я выбираю перегрузку Helper со значением по умолчанию.
...
<% = Html.DropDownList("Organization.ParentOrganization", Model.ParentOrgList,
Model.Organization.ParentOrganization)%>
...
Теперь все работает отлично.
Однако, если кто-то знает, как поступить иначе с бизнесом сериализации, было бы полезно поделиться.
Спасибо