Asp.net mvc 请澄清一下如何使用selectList?
我正在尝试填充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”。这可能吗?如何实现 非常感谢。
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)