Asp.net mvc 如何将值从DropDownList传输到序列化模型对象的属性

Asp.net mvc 如何将值从DropDownList传输到序列化模型对象的属性,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我正在用一个小应用程序测试ASP.NET MVC多步骤(样式向导)中的一些概念,该应用程序允许我在数据库中记录组织 为了简化操作,我有一个类OrganizationFormModelView,它包含一个类Organization的对象和一个名为ParentOrgList的SelectList类型的属性。selectList属性的唯一用途是供DropDownList使用 我还序列化了OrganizationFormModelView以获得多步骤向导效果 在我的第一个视图(或第一步)中,我使用dro

我正在用一个小应用程序测试ASP.NET MVC多步骤(样式向导)中的一些概念,该应用程序允许我在数据库中记录组织

为了简化操作,我有一个类OrganizationFormModelView,它包含一个类Organization的对象和一个名为ParentOrgList的SelectList类型的属性。selectList属性的唯一用途是供DropDownList使用

我还序列化了OrganizationFormModelView以获得多步骤向导效果

在我的第一个视图(或第一步)中,我使用dropdownlist帮助器为组织的一个名为ParentOrganization的属性指定一个值,该属性从ParentOrgList中提取数据

...
<% = Html.DropDownList("Organization.ParentOrganization", Model.ParentOrgList)%>
... 
。。。
... 
第一次加载页面时,我可以做出选择。而且,我的选择在向导的所有步骤中都反映在我的对象模型中(请参见调试模式下的Visual studio)

但是,当我被重定向回第一个视图(第一步)时,我会收到以下错误消息:

键为'Organization.ParentOrganization'的ViewData项的类型为'System.String',但必须为'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保留了用户的选择。因此,我选择一个具有默认值的助手重载

...
<% = Html.DropDownList("Organization.ParentOrganization", Model.ParentOrgList, 
     Model.Organization.ParentOrganization)%>
... 
。。。
... 
现在,一切都很顺利

然而,如果有人知道如何以不同的方式处理序列化业务,那么分享会很有帮助


谢谢

您能再给我们看一些视图和控制器代码吗?在我看来,DropDownList的选定值似乎以某种方式存储在ViewData集合中。@Nathan Taylor:你说得对。我想我需要更仔细地查看ViewData,然后回到这里。