0

我有一个问题,不知道从哪里开始,因为我是 MVC 的新手。我有三张桌子:

  • 用户(用户 ID、用户名等)这定义了用户。
  • Service (ServiceID, ServiceName, etc...)这定义了服务。
  • 许可证(ID、UserID、ServiceID 等)将服务映射到用户。

在后端,如果用户有许可证,他就可以访问服务。理想情况下,我希望在我的 EditUser 视图中有一个服务列表,我可以在其中检查他们应该拥有哪些服务的许可证。

此列表需要预先填充当前许可证,如果未选中并保存,则需要将其删除。

我拥有添加和删除许可证的所有方法,但我需要知道如何在我的控制器和视图中实现这一点。

提前致谢。

4

1 回答 1

2

首先,定义一个ViewModel

public class EditUserViewModel
{
    public User User { get; set; }
    public IList<License> Licenses { get; set; }
    public IList<Service> Services { get; set; }
}

视图模型只是一个帮助类,它包含显示视图所需的一切。然后,在您的操作中:

public ActionResult EditUser(int id)
{
    var userViewModel = new EditUserViewModel
    {
        User = // Get user from db
        Licenses = // Get licenses for that user
        Services = // Getservies the user in entitled to   
    }

    return View(userViewModel); 
}

然后,使用 EditUserViewModel 使您的视图成为模型的类型化视图:

@model EditUserViewModel

@* //Some html or whatever here *@

@* //Access your model properties as follows *@
@Model.User
@Model.Licenses
@Model.Service    

您可以将 EditUserViewModel 类重用于其他视图,例如 UserDetails。在这种情况下,您可能想要重命名并去掉“编辑”前缀。

更新以澄清评论中 的问题:经验法则:保持您的视图模型小,愚蠢和简单。没有方法、功能或智能,只有几个属性可以帮助您进行显示过程。您只想在非常相似的视图上重用视图模型,就像EditUserDisplayUser视图一样。你会有一个不同的视图模型DisplayServices,等等。

于 2011-03-16T14:18:59.030 回答