有关使用selectList的一些说明吗?

时间:2013-07-10 11:42:57

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4

我正在尝试填充SelectList:

new SelectList(db.StdOrgUser, "Id", "LastName", stdlibraryitem.StdOrgUserId);

以上是直接的方法,因为“LastName”来自StdOrgUser表。但是“StdOrgUser”链接到“Aspnet_Membership”,因此链接到“Aspnet_Users”。

StdOrgUser (*-1) Aspnet_Membership (0..1 - 1) Aspnet_Users

我想访问存储在SelectList中的“Aspnet_Users”而不是“LastName”的“用户名”。这可能吗?如何?

非常感谢。

1 个答案:

答案 0 :(得分:1)

不要使用视图包,而是使用视图模型传递数据。不要传递你的域模型,使用视图模型。

让我们从你的行动方法开始。让我们称之为YourActionMethod。它会创建视图模型的实例,并使用您的用户填充用户列表。如何在服务层中填充用户完全取决于您。

public ActionResult YourActionMethod()
{
     YourViewModel viewModel = new YourViewModel
     {
          Users = userService.FindAll()
     };

     return View(viewModel);
}

您的视图模型可能如下所示(部分):

public class YourViewModel
{
     public int UserId { get; set; }

     public IEnumerable<User> Users { get; set; }
}

创建域模型以代表您的用户。您的用户域模型可能如下所示:

public class User
{
     public int Id { get; set; }

     public string FirstName { get; set; }

     public string LastName { get; set; }

     public string UserName { get; set; }

     public string Password { get; set; }
}

您的视图(页面)将收到您的视图模型:

@model YourProject.ViewModels.Users.YourViewModel

您下拉HTML标记将如下所示:

@Html.DropDownListFor(
     x => x.UserId,
     new SelectList(Model.Users, "Id", "UserName", Model.UserId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.UserId)