Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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 MVC2:多态类的ViewModel_C#_Asp.net_Asp.net Mvc 2_Polymorphism_Viewmodel - Fatal编程技术网

C# ASP.NET MVC2:多态类的ViewModel

C# ASP.NET MVC2:多态类的ViewModel,c#,asp.net,asp.net-mvc-2,polymorphism,viewmodel,C#,Asp.net,Asp.net Mvc 2,Polymorphism,Viewmodel,我正在制作一个MVC2应用程序来管理计费方案。这些计费方案可以是各种类型,例如每日、每周、每月等,并且所有类型都有其特定的属性。我的班级结构如下所示: public abstract class BillingScheme { /* basic billing scheme properties */ } public class BillingSchemeMonthly : BillingScheme { public string SpecificMonths; } //etc. f

我正在制作一个MVC2应用程序来管理计费方案。这些计费方案可以是各种类型,例如每日、每周、每月等,并且所有类型都有其特定的属性。我的班级结构如下所示:

public abstract class BillingScheme { /* basic billing scheme properties */ }
public class BillingSchemeMonthly : BillingScheme
{
    public string SpecificMonths;
}
//etc. for other scheme types
我使用计费方案ID通过基类检索计费方案,它为我提供了一个正确类型的对象

属性SpecificMonths映射到包含的数据库varchar字段-月数的分隔字符串。我想将其拆分为一个数组,这样我就可以创建一个复选框列表,我最好使用viewmodel中的facade属性来完成这项工作。我可以在视图内部完成,但这似乎与MVC模式背道而驰

问题是我只能专门为BillingSchemeMonthly创建此viewmodel,而无法将BillingSchemeMonthly强制转换为BillingSchemeMonthly viewmodel。 我不希望在viewmodel中实现克隆方法,因为整个计费方案相当大,并且属性的数量可能会增加


提前感谢您的帮助。

理想情况下,从模型转换到视图模型时,您将拥有一个单独的转换器类

在我们的MVC项目中,我们有两种类型的转换器,
IConverter
定义
Convert
方法,以及
ITwoWayConverter
定义
ConvertTo
ConvertFrom
方法

然后,我们将转换器注入必要的控制器,并使用它们进行所有转换

这使一切保持整洁,并允许清晰地分离关注点

当我们实现这一点时,我们将专门为我们希望执行的转换类型创建一个新类:

    public class MonthlySchemeBillingToMonthlySchemeBillingViewModelConverter :      
                     IConverter<MonthlySchemeBilling,MonthlySchemeBillingViewModel>
        {
         public MonthlySchemeBillingViewModel Convert(MonthlySchemeBilling)
         {
           // Impliment conversion
         }
        }
public class MonthlySchemeBillingToMonthlySchemeBillingViewModelConverter:
I转换器
{
公共月化学平衡模型转换(月化学平衡)
{
//执行转换
}
}

你可以看看。

好建议!这基本上等于实现了一个克隆方法,不是吗?我希望避免手动填充所有属性。