Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net mvc 4在视图中保存列表时如何在我的控制器中保留类型_C#_Asp.net Mvc_Razor_Type Conversion_Covariance - Fatal编程技术网

C# Asp.net mvc 4在视图中保存列表时如何在我的控制器中保留类型

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

我有一个大问题,我有点失望。我找不到解决这个问题的好办法:

我有A公司和B公司,他们专门经营一家有接口的公司 在我的控制器里。然后我从不同的数据库加载,companyA和companyB在我的列表中。在我的编辑器视图中,我显示不同的对象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
}
我已经编辑了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)