2012-12-10 18 views
1

我有一個大問題,我有點失望。我無法找到這個問題的一個很好的解決方案:Asp.net mvc 4剃鬚刀如何保存我的控制器中的類型時,在視圖中保存列表

我有CompanyACompanyB誰專門Company誰在我的控制器的接口ICompany 。然後我從我的List<company>加載不同的數據庫,companyAcompanyB。在我的EditorView中,我顯示了不同的對象companyAcompanyB

當我保存時,在我的控制器中,我列表中的對象不是鍵入CompanyACompanyB,但它們都是Company類型。

我怎樣才能保存我的類型,當我保存?

下面是一些代碼,如果我的解釋不明確:

我的例子CompanyViewModel.cs:

public class CompanyViewModel 
{ 
    #region Properties 
    public User User { get; set; } 
    public ExternalAccounts ExtAccounts { get; set; } 
    public List<Company> Companies { get; set; } // or List<object> Companies { get; set; } 
    .... 
    #region Ctor 
    public CompanyViewModel() 
    { } 
    public CompanyViewModel(ExternalAccounts extAccount, bool iniPrefLanguage = true) 
    { 
     //normaly it's load from bdd 
     ... 
     Companies = new List<Company>(); 

     if (test == true) 
     { 
      Companies.Add(new CompanyA()); // call webService 
     } 
     if (test2 == true) 
     { 
      Companies.Add(new CompanyB()); 

     } 
     ... 
     #region 
} 

或者我可以有:鑑於

public ActionResult EditCompanies() 
    { 
     ... 

     // Companies = new List<Company>(); 
     Model.Companies.Add(new CompanyA()); // call webService 
     Model.Companies.Add(new CompanyB());     

     return View(Model); 
    } 

    public ActionResult SaveCompanies(ComapnyViewModel model) 
    { 
     var test = model.Companies.OfType<CompanyA>(); // return null !!! 
     test = model.Companies.OfType<CompanyB>(); // return null !!!! 
     test = model.Companies.OfType<Company>(); // return my objects !!!! 

     return View(); 
    } 

 @Html.EditorFor(m => m.Companies) 

和我hav ËEditorTemplate與Company.cshtml,CompanyA.cshtml,CompanyB.cshtml

在我在查看負荷,在我的列表中的每個對象往右走EditorTemplate(公司A和CompanyB)

但是,當我救...我只有一個公司類型的列表...

任何想法?謝謝!

+3

不要這樣做。視圖模型不應該包含像這樣的複雜數據。模型聯編程序不能像這樣工作。 – SLaks

+0

SLaks是正確的,實際上它們被稱爲視圖,因爲你唯一的擔心應該是演示。至少將您的邏輯移動到控制器。 –

+0

謝謝你的迴應,但我必須在同一視圖中編輯CompanyA和CompanyB。我應該添加這個CompanyA和CompanyB名單 ...在ViewModel或控制器,我有同樣的問題...我的問題是如何保持我的名單中的類型(CompanyA和CompanyB)當我保存。因爲顯示,沒關係。我必須在相同的視圖中混合使用CompanyA和CompanyB ......這不是我的選擇 –

回答

0

我所做的是:

我創建的視圖以公司爲模型,並與公司A的局部視圖爲模型,並與CompanyB另一視圖模型。在CompanyView內部,我打電話給Html.Partial("CompanyAView", Model)Html.Partial("CompanyBView", Model)

我希望這會有所幫助。

+0

我不知道明白...如果你是一個列表如何做到這一點 ...在我看來,我做@Html。EditorFor(m => m.Companies) 並且它調用了好的EditorTemplate companyA.cshtml和companyB.cshtml。是那個嗎 ? –

相關問題