2010-05-13 84 views
1

我正在測試ASP.NET MVC multisteps(Style Wizards)中的一些概念,它帶有一個小應用程序,它允許我將組織記錄在數據庫中。如何將值從DropDownList傳遞到序列化模型對象的屬性

爲了方便起見,我有一類OrganizationFormModelView包含類組織的對象,一個名爲的SelectList類型的ParentOrgList財產。 selectList屬性的唯一目的是由DropDownList使用。

我還序列化了OrganizationFormModelView以獲得多步向導效果。

在我的第一個觀點(或第一步),我使用了一個下拉列表幫手值分配給本組織的屬性稱爲ParentOrganization,從ParentOrgList提取數據之一。

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

第一次加載頁面時,我可以做出選擇。而且,我的選擇反映在我的對象模型的所有步驟(參見調試模式下的Visual Studio)。

但是,當我重定向回第一個視圖(第一步),我收到以下錯誤消息的任何時間:

「與按鍵‘Organization.ParentOrganization’的ViewData的產品的鍵入'System.String',但需要是'IEnumerable'類型。「

感謝您的幫助

+0

你能告訴我們一些更多的視圖和控制器代碼嗎?這聽起來像你的DropDownList的選定值以某種方式存儲在ViewData集合中。 – 2010-05-14 01:41:07

+0

@Nathan Taylor:你說得對。我想我需要更仔細地觀察ViewData並回到這裏。 – Richard77 2010-05-14 07:56:21

回答

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 
    } 

我還,修改視圖,以便即使ParentOrgList的價值不斷重新分配,而是將DropDownList保持了用戶的選擇。所以,我選擇了一個默認值的Helper重載。

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

現在,一切都運轉良好。

但是,如果有人知道如何以不同方式繼續進行序列化業務,那麼共享將會很有幫助。

謝謝

相關問題