繁体   English   中英

Asp.net MVC 4 razor如何在视图中保存列表时如何在控制器中保留类型

[英]Asp.net mvc 4 razor How keep types in my Controller when saving a list in a view

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

CompanyACompanyB谁专门Company谁拥有的接口ICompany在我的控制器。 然后,我从不同的数据库,装载companyAcompanyB在我的List<company> 在我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)

我有带有Company.cshtml,CompanyA.cshtml,CompanyB.cshtml的EditorTemplate

在View中加载期间,列表中的每个对象都转到正确的EditorTemplate(CompanyA和CompanyB)

但是当我保存...时,我仅列出公司类型...

有任何想法吗? 谢谢!

我所做的是:

我以Company为模型创建了一个视图,以CompanyA为模型创建了一个局部视图,并以CompanyB为模型创建了另一个视图。 在CompanyView内部,我调用了Html.Partial("CompanyAView", Model)Html.Partial("CompanyBView", Model)

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM