C# Asp.net mvc 4在视图中保存列表时如何在我的控制器中保留类型
我有一个大问题,我有点失望。我找不到解决这个问题的好办法: 我有A公司和B公司,他们专门经营一家有接口的公司 在我的控制器里。然后我从不同的数据库加载,companyA和companyB在我的列表中。在我的编辑器视图中,我显示不同的对象companyA和companyB 在控制器中保存时,列表中的对象不是CompanyA和CompanyB类型,而是Company类型 保存时如何保存我的类型 如果我的解释不清楚,这里有一些代码: 我的示例CompanyViewModel.cs:C# Asp.net mvc 4在视图中保存列表时如何在我的控制器中保留类型,c#,asp.net-mvc,razor,type-conversion,covariance,C#,Asp.net Mvc,Razor,Type Conversion,Covariance,我有一个大问题,我有点失望。我找不到解决这个问题的好办法: 我有A公司和B公司,他们专门经营一家有接口的公司 在我的控制器里。然后我从不同的数据库加载,companyA和companyB在我的列表中。在我的编辑器视图中,我显示不同的对象companyA和companyB 在控制器中保存时,列表中的对象不是CompanyA和CompanyB类型,而是Company类型 保存时如何保存我的类型 如果我的解释不清楚,这里有一些代码: 我的示例CompanyViewModel.cs: public cl
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
}
我已经编辑了Company.cshtml、CompanyA.cshtml、CompanyB.cshtml的模板
在视图中加载期间,列表中的每个对象都会转到右侧编辑器模板CompanyA和CompanyB
但是当我存钱的时候。。。我只有一个公司类型的列表
有什么想法吗?谢谢大家! 我所做的是:
我创建了一个以Company为模型的视图,一个以CompanyA为模型的局部视图,另一个以CompanyB为模型的视图。在CompanyView中,我调用了Html.partialCompanyView,Model和Html.partialCompanyView,Model
我希望这有帮助。不要那样做。视图模型不应该包含这样的复杂数据。模型绑定器不能这样工作。SLaks是对的,事实上它们被称为视图,因为您唯一关心的应该是演示文稿。至少将逻辑移到控制器。感谢您的回复,但我必须在同一视图中编辑CompanyA和CompanyB。我应该把这个公司A和公司B添加到列表中。。。在ViewModel或Controller中,我有相同的问题。。。我的问题是如何在保存时将CompanyA和CompanyB类型保留在列表中。因为对于显示,它是可以的。我必须把A公司和B公司混为一谈。。。这不是我的选择,但是当MVC在文章中作为元素返回时,它无法判断类型。它不像序列化的ViewState那样工作。您可以实现您自己的ModelBinder,它可以基于一些额外的类型属性来实现,但我认为这可能有些过分。ViewModels应该相对简单,并且MVC可以通过默认的构造函数轻松地重新创建。。。如何做,如果你是一个列表。。。在我看来,我做@Html.EditorForm=>m.companys,它称好的编辑器为companyA.cshtml和companyB.cshtml。是吗?
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)