views:

432

answers:

1

Depending on where I use my Class, I want to be able to show a different DisplayName.
I have the following class:

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

I have a corresponding Table in the database Portal

I use the Portal table with a PortalController for the Site Admin to update the records in the Portal Table.

I want another user with a different Role (AsstAdmin) to be able to update this table as well.
To facilitate that I am thinking of creating a separate partial class that somehow links back to the Portal Model. This would allow me to display limited Fields for update by the AsstAdmin and I can display a different name for the Field as well.

How can I accomplish this task? If I add the following class which inherits from Portal than I get an exception:

Unable to cast object of type 'Project1.Mvc.Models.Portal' to type 'Prpject1.Mvc.Models.Site'.

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

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

You could create two different view models that have the only the fields each type of user can see. You will need a service to do the appropriate mapping back to the Portal entity when saving.

Ryan
Ryan, I did do that and am using a service as you mention, but not sure how to convert the Portal to the Site?
Picflight
There are a few ways to go about this. You could create separate strongly typed views for each role. If a user comes to one of the views and doesn't have the right permissions for it, you could redirect them to the other view. Alternatively you could create two strongly typed partial views and have conditional logic in a parent view that loads the correct partial based on the role. As far as how to make Site and Portal work together, I'd make PortalViewModel and SiteViewModel. Neither should inherit from anything. Then you can have your service copy the correct fields from the Portal instance.
Ryan