Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Asp.net mvc Bast实践:具有多种对象类型的ASP.NET MVC控制器/操作_Asp.net Mvc_Controller_Action - Fatal编程技术网

Asp.net mvc Bast实践:具有多种对象类型的ASP.NET MVC控制器/操作

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

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

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

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

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的泛型答案在这种情况下更合适。