如何将值从DropDownList传递到序列化模型对象的属性

时间:2010-05-13 15:04:11

标签: asp.net-mvc html-helper

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

为了简化操作,我有一个类 OrganizationFormModelView ,它包含类组织的对象和一个名为 ParentOrgList 的SelectList类型的属性。 dropList属性的唯一目的是由DropDownList使用。

我还序列化 OrganizationFormModelView 以获取多步骤向导效果。

在我的第一个视图(或第一步)中,我使用下拉列表帮助程序为一个名为 ParentOrganization 的组织属性分配一个值,该属性从 ParentOrgList中提取数据

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

第一次加载页面时,我可以做出选择。而且,我的选择反映在我的对象模型以及向导的所有步骤中(请参阅调试模式下的Visual Studio)。

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

“具有键'Organization.ParentOrganization'的ViewData项的类型为'System.String',但需要是'IEnumerable'类型。”

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

仔细考虑我的代码之后,我现在明白发生了什么。 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 
    }

我也修改了View,这样即使连续重新分配ParentOrgList的值,DropDownList也会保留用户的选择。所以,我选择了一个默认值的Helper重载。

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

现在,一切都运转良好。

但是,如果有人知道如何以序列化业务的方式进行不同的操作,那么分享会很有帮助。

由于