Bast Practice:具有多种对象类型的ASP.NET MVC Controller / Action

时间:2010-06-14 13:35:13

标签: asp.net-mvc controller action

我正在寻找以下问题的最佳方法。

我目前拥有大量的对象,这些对象都是为单个基础对象继承的,并且都非常相似。是否有可用的解决方案,允许一个创建操作和一个编辑操作,而无需复制大量相同的代码。

例如,我可能有一个人物对象:

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();
}

现在我可以很容易地复制这些代码并对其进行修改,这样我就可以创建一个salesPerson和customer,但是我会根据PersonBase有大量的对象,而且我会想要重复类似的代码。避免。

对于所有类型的Person,使Create动作更通用的方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

我发现对我有用的解决方案是使用C#4中的dynamic。所以我的代码看起来像:

[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();
}