Как передать значение от DropDownList до свойства сериализированного объекта модели

Я тестирую некоторые понятия в ASP.NET мультишаги MVC (Мастера Стиля) с небольшим приложением, которые позволяют мне организациям записей в базе данных.

Для создания вещей легче у меня есть класс OrganizationFormModelView, который содержит объект класса Организация и свойство под названием ParentOrgList типа SelectList. Единственная цель selectList свойства состоит в том, чтобы использоваться DropDownList.

Я имею, также сериализируют OrganizationFormModelView для получения эффекта Мастера мультишагов.

В моем первом представлении (или первый шаг), я использую dropdownlist помощника для присвоения значения одному из свойство Организации под названием ParentOrganization, который тянет данные ParentOrgList.

...
<% = Html.DropDownList("Organization.ParentOrganization", Model.ParentOrgList)%>
... 

В первый раз загрузки страницы, я могу сделать выбор. И, мой выбор отражается в моей объектной модели все время по мастеру' шаги (см. Visual Studio в режиме отладки).

Но, когда любое время, я перенаправляюсь назад к первому представлению (первый шаг), я получаю следующее сообщение об ошибке:

"Объект ViewData с ключевой 'Организацией. ParentOrganization' имеет тип 'Система. Строка', но потребности иметь тип 'IEnumerable'".

Спасибо за помощь

1
задан Richard77 13 May 2010 в 15:04
поделиться

1 ответ

Внимательно изучив свой код, я теперь понимаю, что происходит. 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)%>
... 

Теперь все работает отлично.

Однако, если кто-то знает, как поступить иначе с бизнесом сериализации, было бы полезно поделиться.

Спасибо

2
ответ дан 3 September 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: