我正在使用ASP.net MVC 4建立一个网站。该网站将由其用户用于处理他们的会议。
使用下面的模型,如果我使用Entity Framework创建一个控制器,Visual Studio会生成一个CRUD,其中每个属性都是可编辑的(除MeetingId
之外的密钥):Begin
,End
,Message
,IsSent
,CustomerId
和UserId
。
问题:
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; }
}
答案 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()