0

我正在尝试填充 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”。这可能吗?如何?

非常感谢。

4

1 回答 1

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)
于 2013-07-11T08:42:45.017 回答