我正在尝试填充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”的“用户名”。这可能吗?如何?
非常感谢。
答案 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)