当前位置: 首页 > 知识库问答 >
问题:

asp。netmvc 4-多用户类图

凌蕴藉
2023-03-14

我一直在搜索这个主题,但没有找到我想要的。基本上,我开始用UML的所有东西,用例,类图来计划一个项目。然后我们决定使用ASP。NET MVC。该应用程序是一种O-Desk或Elance

我有用户,承包商,公司,主持人和管理员。

我有点困惑模型应该如何表示这个用户,以及如何使用asp设置权限和角色。net mvc特性。

在一个正常的应用程序中,我会为他们每个人都创建一个类,他们可能会扩展User,其中包含用户名、密码和电子邮件。

在Contractor类中,我有关于该承包商的所有信息,如他申请的工作、他的简历等。

在公司类中,我有张贴的报价、公司名称等。

那么,拥有这个的最佳实践是什么?我这里有一段代码

 public class User
 {
    [Key]
    public string UserID { get; set; }

    [Required(ErrorMessage = "Email is required")]
    [DataType(DataType.EmailAddress, ErrorMessage="Email Format is wrong. Example: user@user.com")]
    [Remote("doesEmailExist", "Contractors", HttpMethod = "POST", ErrorMessage = "Email already exists. Please enter a different one.")]
    public string Email { get; set; }

    [Required]
    [Remote("doesUserNameExist", "Contractors", HttpMethod = "POST", ErrorMessage = "User name already exists. Please enter a different user name.")]
    public string Username { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

还有一个小疑问,我应该有ContractorID吗?还是我抢UserID?只是问问,因为我不知道数据库生成后会是什么样子。不管怎样,我现在要试试这个。

public class Contractor extends User
{
    [Key]
    public int ContractorID { get; set; }

    [Required(ErrorMessage = "First Name is required")]
    [StringLength(20, ErrorMessage = "First Name max length is 20 characters")]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required")]
    [StringLength(20, ErrorMessage = "First Name max length is 20 characters")]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
}


public class Company extends User
{
    [Key]
    public int CompanyID { get; set; }

    [Required(ErrorMessage = "Name of the Company required")]
    public string CompanyName { get; set; }

    private List<Offer> Offers;

    public void AddOffer (Offer offer) {
        Offers.Add(offer);
    }
    public void RemoveOffer(Offer offer)
    {
        Offers.Remove(offer);
    }

}

感谢您提供的任何帮助或提示!问候。

共有1个答案

束阳旭
2023-03-14

我会避免和模特做任何事。模型是用于数据交易的,需要始终反映你的数据库。

你有两样东西。-一个是您可以用来以原始状态存储数据的模型-另一个是您需要显示该信息的视图

那么,该怎么办??简单的做法是,首先进行去模型化并创建一个viewModel。viewModel将反映视图及其规则,因此每个视图和部分视图都有一个。让它简单地使用模型的编写方式,但去掉视图中的内容(exe:[Required(ErrorMessage=“Last Name is Required”)]),这样您就可以创建另一个类来保存这些内容,例如,您可以创建一个视图,其中显示了两种类型的用户,因此您可以创建如下内容:

public class CompanyView
{
    private company= new Company();
    private contractor = new Contractor();

    [Display(Name = "Contractor Name")]
    public string ContractorName{ get{return contractor.FisrtName+ contractor.LastName;} }

    public int CompanyID { get{return company.CompanyID;} set{company.CompanyID = value;}}

    [Required(ErrorMessage = "Name of the Company required")]
    public string CompanyName { get{return company.CompanyName;} set{company.CompanyName = value;}}

    private List<Offer> offers;
    public SelectList Offers{ get { return new SelectList(offers, "OfferID", "OfferName", ""); } }

}

或者类似的东西。重点是,您现在可以创建一个类来表示视图,该视图并不总是与您在数据库中看到的视图完全相同。这样做,你可以扩展视图,用你的模型做一些东西,让用户可以看到并自动填充。例如,当用户发布带有视图信息的表单时,将返回已经填充的视图模型。你可以使用你的视图模型中已经填充好的模型来保存你需要的任何东西。

注意,我注意到在视图模型中使用了所有承包商字段。想象一下,当您更改公司详细信息时,您只需要显示一些承包商名称。在这种情况下,你不需要从承包商那里保存任何东西,你只需要显示他的名字,在视图模型中,你只需显示他的名字就可以了,你不必进行必要的验证等。数据将来自一个查询,您可以在创建viewModel时将其填充到构造函数、工厂或任何所需的地方。

这是令人困惑的,但我希望它有所帮助,如果你不明白的东西,我会努力使它变得更好。也为“马马虎虎”的英语道歉

 类似资料:
  • 我最近开始玩ASP。net MVC(4),但我不能对我遇到的这一个问题掉以轻心。我相信当你知道的时候这很容易。 我基本上是在索引视图中尝试执行以下操作: < li >在索引视图中列出“便笺”类型数据库中的当前项目(这很简单) < li >在同一索引视图中创建新项目(不太容易)。 所以我想我需要一个部分视图,并且我已经创建了如下(_CreateNote.cshtml): 在我的原始索引视图(Inde

  • 在Visual Studio 2010中,我使用ASP. NET MVC 4创建一个web api项目,如下所示:https://www.youtube.com/watch?v=H9vBxAH4f5E 事情进展顺利-我成功地使用了方法,但在使用方法时,我遇到了一个问题: 无法从媒体类型为应用程序/x-www-form-urlencoded的内容中读取类型为字符串的对象。 我的看起来像这样: 为什么

  • 我想了解如何在MVC4应用程序中解决统一命名类型注册。 我正在使用“Unity 3.0”和“Unity boostrapper for ASP.NET MVC”。 我知道unity是在DependencyResolver中注册的,所以我可以使用DependencyResolver方法来获取注册类型的实例。 当我想要回一个简单的注册时,这很好。 例如 但是,当我想获取对命名类型注册的引用时,IDep

  • 在将用户更改保存到数据库时遇到问题,例如更改人员的姓名。我正在使用在新的VS2013 Web项目中使用个人身份验证自动创建的标识模型。遗憾的是,该模板不允许您更改任何用户信息,除了更改角色。我通过谷歌四处查看,我没有找到太多。有人使用基本身份代码实现更新吗? 这是我发现的最接近的东西: 正在更新用户数据-Asp。网络标识 我还没有成功地合并默认模板。本周我刚开始使用Identity,所以问题可能是

  • 这是关于用户和用户类型的关系。 我有两个类User和UserType User有UserID,UserName,UserTypeID UserType为:TypeID,TypeName 一个用户只能有一个用户类型(TypeID1/TypeID2/TypeID3) UML类图表示法是什么?它是关联还是组合还是聚合? 此图将汽车和汽车类型关联为http://www . jetbrains . com/

  • 问题内容: 我正在编写一个具有多个充当用户的类的应用程序(例如,学校帐户和员工帐户)。我正在尝试使用Flask- Login简化操作,但是我不太确定如何做到这一点,因此当用户登录时,我可以让我的应用检查用户名是否属于School帐户或职员帐户,然后正确登录。 我知道如何找出它属于哪种 类型 的帐户(因为所有用户名都必须是唯一的)。但是之后,我不确定如何告诉应用程序我希望它登录该特定用户。 现在,我