2010-03-22 56 views
1

不同的地方我用我的类使用多个显示名称属性,我希望能够表现出不同的显示名称。
我有以下类:如何使用实体框架和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 
{ 
    [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; } 
} 

我有一个相应的数据库中的表门户

我使用Portal表与PortalController为网站管理员以更新门户网站表中的记录。

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

我怎样才能完成这个任务? 如果我添加下面的类从门户继承比我得到一个异常:

无法转换类型 “Project1.Mvc.Models.Portal”的对象键入 “Prpject1.Mvc.Models。现场'。

[MetadataType(typeof(SiteMetaData))] 
public class Site : Portal 
{ 
    public Site() { }   
} 

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

标题可能不适合我所要求的。我不知道该怎么称呼它。 – Picflight 2010-03-22 00:08:38

回答

1

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

+0

Ryan,我确实这样做了,并且正在使用您提到的服务,但不知道如何将Portal转换为网站? – Picflight 2010-03-22 00:29:15

+2

有几种方法可以解决这个问题。您可以为每个角色创建单独的强类型视图。如果用户访问其中一个视图并且没有适当的权限,则可以将其重定向到其他视图。或者,您可以创建两个强类型部分视图,并在父视图中添加条件逻辑,以便根据角色加载正确的部分。至于如何使网站和门户网站一起工作,我会制作PortalViewModel和SiteViewModel。也不应该继承任何东西。然后,您可以让您的服务从Portal实例复制正确的字段。 – Ryan 2010-03-22 02:37:11