ASP.NET MVC 4:如何创建“好”模型?

时间:2013-07-28 21:58:33

标签: c# asp.net entity-framework asp.net-mvc-4

我正在使用ASP.net MVC 4建立一个网站。该网站将由其用户用于处理他们的会议。

使用下面的模型,如果我使用Entity Framework创建一个控制器,Visual Studio会生成一个CRUD,其中每个属性都是可编辑的(除MeetingId之外的密钥):BeginEndMessageIsSentCustomerIdUserId

问题:

  • 我可以在哪里禁止用户修改IsSent属性?
  • 在哪里可以将CustomerId(作为外键)链接到Customer表?那么用户可以从列表中选择合适的客户吗?
  • 在哪里可以将UserId(作为外键)与用户联系起来meeting

由于

[Table("Meeting")]
public class MeetingModel
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int MeetingId { get; set; }

    [Required]
    [DataType(DataType.DateTime)]
    public DateTime Begin { get; set; }

    [Required]
    [DataType(DataType.DateTime)]
    public DateTime End { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string Message { get; set; }

    public bool IsSent { get; set; }

    public int CustomerId { get; set; }
    public int UserId { get; set; }
}

1 个答案:

答案 0 :(得分:2)

你的问题不容易回答,因为有很多方法可以解决这个问题。

模型表示您的数据存储,因此模型不对您的业务规则负责。这就是为什么你应该使用模型来操纵数据,但任何方式都可以为你的模型添加验证。

  

我可以在哪里禁止用户修改IsSent属性?

首先,您应该在控制器中执行此操作,您可以检查用户角色并在表单上显示此属性取决于用户权限。 其次,您可以将数据库模型与ViewModel分开,例如在您的示例中它将是db模型,然后您可以添加另外两个模型,例如AdminMeetingModel,RestrictedUserMeetingModel。

  

在哪里可以将CustomerId(作为外键)链接到Customer表?   那么用户可以从列表中选择合适的客户吗?   我不确定你的mvc级别,但在View中很容易做到   @ Html.DropDownFor(m => m.CustomerId,LIST_OF_CUSTOMERS)   然后在控制器中你应该做下一步

public ActionResult Save(MeetingModel model)

MVC将为你工作。

  

在哪里可以将UserId(作为外键)与用户联系起来   创建会议?

在这里,您可以在控制器中执行此操作,或者如果您决定使用自定义模型,那么在构造函数中您可以设置UserID = SomeMethodWhichGetUserId()