不要使用視圖包,而是使用視圖模型傳遞數據。不要傳入您的域模型,請使用視圖模型。
讓我們從您的操作方法開始。我們稱之爲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)
首先,它看起來像直接在視圖中訪問您的DbContext。這是一個不好的做法。你應該創建一個View Model POCO類,並且你的Razor View應該被強制鍵入到該View Model類中。你需要做的是構建一個LINQ查詢,它連接StdOrgUser和aspnet_users表並返回用戶名。 – Rob
感謝您的評論。實際上,這個selectList正在填充在控制器中,並通過ViewBag傳回。假設我有一個來自LINQ查詢的「UsernameList」。我應該如何更改「SelectList」語句來合併這個。顯然,我試圖填充「StdOrgUser」,但使用「UserNameList」只是爲了顯示的原因。 – SamJolly