Entity framework 如何使用EntityFramework和ASP.NETMVC2使用多个DisplayName属性

Entity framework 如何使用EntityFramework和ASP.NETMVC2使用多个DisplayName属性,entity-framework,asp.net-mvc-2,Entity Framework,Asp.net Mvc 2,根据我使用类的位置,我希望能够显示不同的显示名。 我有以下课程: [MetadataType(typeof(PortalMetaData))] [System.Web.Mvc.Bind(Exclude = "PortalId")] public partial class Portal { public Portal() { this.Created = DateTime.Now; } } public class PortalMetaData {

根据我使用类的位置,我希望能够显示不同的显示名。
我有以下课程:

[MetadataType(typeof(PortalMetaData))]
[System.Web.Mvc.Bind(Exclude = "PortalId")] 
public partial class Portal
{
    public Portal()
    {
      this.Created = DateTime.Now;
    }
}
public class PortalMetaData
{
    [Required(ErrorMessage = "Portal name is required")]
    [StringLength(50, ErrorMessage = "Portal name must be under 50 characters")]
    public object PortalName { get; set; }

    [Required(ErrorMessage = "Description is required")]
    public object Description { get; set; }
}
我在数据库门户中有一个对应的表

我将门户表与门户控制器一起用于站点管理员更新门户表中的记录

我希望另一个具有不同角色(AsstAdmin)的用户也能够更新此表。
为了方便起见,我正在考虑创建一个单独的分部类,以某种方式链接回门户模型。这将允许我显示有限的字段以供AsstAdmin更新,并且我还可以为字段显示不同的名称

我如何完成这项任务? 如果添加从门户继承的以下类,则会出现异常:

无法强制转换类型为的对象 输入“Project1.Mvc.Models.Portal” “Prpject1.Mvc.Models.Site”


您可以创建两个不同的视图模型,其中只有每种类型的用户可以看到的字段。保存时,您将需要一个服务来执行回门户实体的适当映射。

您可以创建两个不同的视图模型,其中只有每种类型的用户可以看到的字段。在保存时,您将需要一个服务来执行相应的映射回门户实体。

标题可能不适合我的要求。我不知道该怎么称呼它。这个标题可能不适合我的要求。我不知道该怎么称呼它。Ryan,我确实这么做了,并且正在使用您提到的服务,但不确定如何将门户转换为网站?有几种方法可以实现这一点。您可以为每个角色创建单独的强类型视图。如果用户访问其中一个视图但没有相应的权限,则可以将其重定向到另一个视图。或者,您可以创建两个强类型的局部视图,并在父视图中具有条件逻辑,该父视图根据角色加载正确的局部视图。至于如何使站点和门户协同工作,我将创建PortalViewModel和SiteViewModel。两者都不应该继承任何东西。然后,您可以让您的服务从门户实例复制正确的字段。Ryan,我这样做了,并且正在使用您提到的服务,但不确定如何将门户转换为站点?有几种方法可以做到这一点。您可以为每个角色创建单独的强类型视图。如果用户访问其中一个视图但没有相应的权限,则可以将其重定向到另一个视图。或者,您可以创建两个强类型的局部视图,并在父视图中具有条件逻辑,该父视图根据角色加载正确的局部视图。至于如何使站点和门户协同工作,我将创建PortalViewModel和SiteViewModel。两者都不应该继承任何东西。然后,您可以让服务从门户实例复制正确的字段。
[MetadataType(typeof(SiteMetaData))]
public class Site : Portal
{
    public Site() {  }        
}

public class SiteMetaData
{
   [Required(DisplayName = "Site Description")]
   public object Description { get; set; }
}