如何使用继承/使用MVC中的子类更新抽象的属性

时间:2011-10-12 15:26:31

标签: asp.net-mvc-3 ef-code-first

我有一个抽象类

public abstract class Member
{
   public string ID { get; set; }
   public string Username { get; set; }
   public int  MemberType { get; set; } 
   public abstract string MemberName { get; set; }
   public int Status  { get; set; }
}

public class Person : Member
{
   public string LastName { get; set; }
   public string FirstName{ get; set; }
}

public class Business : Member
{
   public string BusinessName { get; set; }
   public string TaxNo { get; set; }
}

该类使用流畅的API进行映射,

现在,有没有办法在不使用或转到子类(Person / Business)的情况下从视图(具有成员模型)更新“Status”属性?

我刚尝试过,但在提交页面时说“无法创建抽象类。”。

或者有正确的方法可以做到这一点吗?

由于

3 个答案:

答案 0 :(得分:0)

听起来你的问题是你的action方法有一个抽象类型作为参数,默认的模型绑定器无法做任何事情。如果你没有为两个不同的类使用相同的视图,你可能需要实现自己的模型绑定器来检查传入的请求,并决定实例化哪个类型,Person或Business。

有关创建自定义模型装订器的更多信息,请查看此链接:

http://odetocode.com/blogs/scott/archive/2009/05/05/iterating-on-an-asp-net-mvc-model-binder.aspx

答案 1 :(得分:0)

不在EF。您必须实例化一个对象以使用EF,并且您无法实例化一个抽象类。

你可以让这个课不是抽象的。或者你可以使用存储过程更新字段,或者直接sql。

答案 2 :(得分:0)

这似乎与我此前回答的问题类似:

ASP.NET MVC 3: DefaultModelBinder with inheritance/polymorphism