1

私は大きな問題を抱えており、少しがっかりしています。私はこの問題の良い解決策を見つけることができません:

私は持ってCompanyAいて、誰が 私のコントローラーにインターフェースを持っているのCompanyBかを専門としています。次に、さまざまなデータベースからロードします。私のでは、さまざまなオブジェクトとを表示します。CompanyICompanycompanyAcompanyBList<company>EditorViewcompanyAcompanyB

保存しているとき、コントローラーで、リスト内のオブジェクトはタイプ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を持っています

ビューにロードしている間、リスト内の各オブジェクトは適切な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 に答える