1

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

我有谁专门谁在我CompanyA的 控制器中有一个接口。然后我从不同的数据库加载,并在我的. 在我的中,我显示不同的对象和.CompanyBCompanyICompanycompanyAcompanyBList<company>EditorViewcompanyAcompanyB

当我保存时,在我的控制器中,我列表中的对象不是要键入CompanyAand CompanyB,但它们都是 type 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)

但是当我保存时......我只有一个公司类型的列表......

有任何想法吗?谢谢!

4

1 回答 1

0

我所做的是:

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

我希望这有帮助。

于 2012-12-10T23:18:25.363 回答