0

我想填充的SelectList:有關使用selectList的一些說明嗎?

new SelectList(db.StdOrgUser, "Id", "LastName", stdlibraryitem.StdOrgUserId); 

以上是在「名字」的簡單的方法來自StdOrgUser表。但是,「StdOrgUser」鏈接到「Aspnet_Membership」,因此鏈接到「Aspnet_Users」。

StdOrgUser (*-1) Aspnet_Membership (0..1 - 1) Aspnet_Users 

我想訪問存儲在SelectList的「Aspnet_Users」中的「用戶名」,而不是「LastName」。這是可能的和如何?

非常感謝。

+0

首先,它看起來像直接在視圖中訪問您的DbContext。這是一個不好的做法。你應該創建一個View Model POCO類,並且你的Razor View應該被強制鍵入到該View Model類中。你需要做的是構建一個LINQ查詢,它連接StdOrgUser和aspnet_users表並返回用戶名。 – Rob

+0

感謝您的評論。實際上,這個selectList正在填充在控制器中,並通過ViewBag傳回。假設我有一個來自LINQ查詢的「UsernameList」。我應該如何更改「SelectList」語句來合併這個。顯然,我試圖填充「StdOrgUser」,但使用「UserNameList」只是爲了顯示的原因。 – SamJolly

回答

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) 
+0

謝謝你這個非常有啓發性的迴應。 – SamJolly