0

我有一个问题,不知道从哪里开始,因为我是MVC的新手。我有三个表:在MVC3中使用多个选择向用户添加服务

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

在后端用户可以访问服务,如果他有许可证。理想情况下,我想在我的EditUser视图中查看服务列表,以查看他们应该获得许可的服务。

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

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

在此先感谢。

回答

2

首先,定义一个视图模型

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视图等。

+0

谢谢。这很有帮助。观看模型是前进的方向。拥有一个包含所有内容的单一视图模型或每个不同视图的许多特定视图模型会更好吗? – TheGwa 2011-03-17 09:01:57

+0

@TheGwa - 不客气。您最终可能会拥有多个视图模型,因为对于EditUser视图而言,wat不太可能适合EditServices视图。经验法则:保持他们小,笨,简单。没有方法,功能或智能,只有一些帮助您进行显示过程的属性。 – 2011-03-17 09:13:29

相关问题