Asp.net mvc Bast实践:具有多种对象类型的ASP.NET MVC控制器/操作
我正在寻找解决以下问题的最佳方法 我当前拥有大量对象,这些对象都是为单个基础对象继承的,并且都非常相似。是否有一个解决方案可以允许一个创建操作和一个编辑操作,而无需复制大量相同的代码 例如,我可能有一个person对象:Asp.net mvc Bast实践:具有多种对象类型的ASP.NET MVC控制器/操作,asp.net-mvc,controller,action,Asp.net Mvc,Controller,Action,我正在寻找解决以下问题的最佳方法 我当前拥有大量对象,这些对象都是为单个基础对象继承的,并且都非常相似。是否有一个解决方案可以允许一个创建操作和一个编辑操作,而无需复制大量相同的代码 例如,我可能有一个person对象: public class PersonBase { public string FirstName { get; set; } public string LastName { get; set; } } 然后我将从Person继承一些对象,比如: public cl
public class PersonBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
然后我将从Person
继承一些对象,比如:
public class SalesPerson : PersonBase
{
public double TotalCommission { get; set; }
}
public class Customer: PersonBase
{
public string Address { get; set; }
}
现在,我有一项行动将创建一个客户群:
[HttpPost]
public virtual ActionResult Create(FormCollection collection)
{
var person = new PersonBase();
UpdateModel(person);
if ( Model.IsValid && person.IsValid )
{
// Save to the db
}
return View();
}
现在我可以很容易地复制这个代码并修改它,这样我就可以创建一个销售人员和客户,但是我将有大量基于PersonBase的对象,这将是我想要避免的类似代码的大量重复
对于所有类型的人,创建操作是否更通用
谢谢我发现对我有效的解决方案是使用C#4中的
动态
。所以我的代码看起来像:
[HttpPost]
public virtual ActionResult Create(int type, FormCollection collection)
{
dynamic person = new PersonBase();
if ( type == 1 )
person = new SalesPerson();
else if ( type == 2 )
person = new Customer();
UpdateModel(person);
if ( Model.IsValid && person.IsValid )
{
// Save to the db
}
return View();
}
我不确定我会认为这是一个很好的使用动态。我认为John的泛型答案在这种情况下更合适。