Asp.net mvc 请澄清一下如何使用selectList?

Asp.net mvc 请澄清一下如何使用selectList?,asp.net-mvc,asp.net-mvc-3,entity-framework,entity-framework-4,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_会员”,因此链接到“Aspnet_用户” 我想访问存储在选择列表中“Aspnet\u Users”中的“username”,而不是“LastName”。这可能吗?如何实现 非常感谢。

我正在尝试填充SelectList:

new SelectList(db.StdOrgUser, "Id", "LastName", stdlibraryitem.StdOrgUserId);
上面的方法很简单,因为“LastName”来自StdOrgUser表。然而,“StdOrgUser”链接到“Aspnet_会员”,因此链接到“Aspnet_用户”

我想访问存储在选择列表中“Aspnet\u Users”中的“username”,而不是“LastName”。这可能吗?如何实现


非常感谢。

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

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

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

     return View(viewModel);
}
您的视图模型可以如下所示(局部):

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

@model YourProject.ViewModels.Users.YourViewModel
您下拉的HTML标记将如下所示:

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; }
}
@Html.DropDownListFor(
     x => x.UserId,
     new SelectList(Model.Users, "Id", "UserName", Model.UserId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.UserId)

首先,看起来您是在视图中直接访问DbContext。这是个坏习惯。您应该创建一个视图模型POCO类,并且您的Razor视图应该是该视图模型类的强类型视图。您需要做的是构建一个LINQ查询,将StdOrgUser和aspnet_users表连接起来并返回用户名。感谢您的评论。实际上,这个选择列表正在控制器中填充,并通过ViewBag传回。假设我有一个来自LINQ查询的“用户名列表”。我应该如何更改“SelectList”语句以合并此项。很明显,我正在尝试填充“StdOrgUser”,但是使用“UserNameList”只是为了显示的原因。谢谢你的回答。
@model YourProject.ViewModels.Users.YourViewModel
@Html.DropDownListFor(
     x => x.UserId,
     new SelectList(Model.Users, "Id", "UserName", Model.UserId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.UserId)