我有一個大問題,我有點失望。我無法找到這個問題的一個很好的解決方案:Asp.net mvc 4剃鬚刀如何保存我的控制器中的類型時,在視圖中保存列表
我有CompanyA
和CompanyB
誰專門Company
誰在我的控制器的接口ICompany
。然後我從我的List<company>
加載不同的數據庫,companyA
和companyB
。在我的EditorView
中,我顯示了不同的對象companyA
和companyB
。
當我保存時,在我的控制器中,我列表中的對象不是鍵入CompanyA
和CompanyB
,但它們都是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)
但是,當我救...我只有一個公司類型的列表...
任何想法?謝謝!
不要這樣做。視圖模型不應該包含像這樣的複雜數據。模型聯編程序不能像這樣工作。 – SLaks
SLaks是正確的,實際上它們被稱爲視圖,因爲你唯一的擔心應該是演示。至少將您的邏輯移動到控制器。 –
謝謝你的迴應,但我必須在同一視圖中編輯CompanyA和CompanyB。我應該添加這個CompanyA和CompanyB名單 ...在ViewModel或控制器,我有同樣的問題...我的問題是如何保持我的名單中的類型(CompanyA和CompanyB)當我保存。因爲顯示,沒關係。我必須在相同的視圖中混合使用CompanyA和CompanyB ......這不是我的選擇 –