public class DepartmentOption
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; } // UI 狀態
public bool IsDisabled { get; set; } // 擴充:是否停用
}
Controller 組裝
public ActionResult Index()
{
var currentDeptId = GetCurrentUserDeptId(); // 來源:Session、Claim、QueryString...
var options = _db.Departments
.Select(d => new DepartmentOption
{
Id = d.Id,
Name = d.Name,
IsSelected = d.Id == currentDeptId,
IsDisabled = d.IsArchived
})
.ToList();
// 轉為 SelectListItem(可寫成擴充方法)
var items = options.Select(o => new SelectListItem
{
Text = o.Name,
Value = o.Id.ToString(),
Selected = o.IsSelected,
Disabled = o.IsDisabled
}).ToList();
ViewBag.Departments = items;
return View();
}
模式三:SelectList 建構子直接指定 selectedValue(最簡潔)
適用場景
資料來源為簡單實體集合,無需額外 UI 邏輯。
偏好一行程式碼完成綁定。
Controller
public ActionResult Index(string selectedId) // 來自 QueryString 或 PostBack
{
var projects = _repo.GetAllProjects(); // List { Id, Name }
// SelectList 建構子:(items, dataValueField, dataTextField, selectedValue)
ViewBag.Projects = new SelectList(projects, "Id", "Name", selectedId);
return View();
}