ASP.NET MVC Input With Datalist
2024-01-04
筆記 ASP.NET 開發如何使用 Html Datalist 讓 Input 輸入具有可以挑選 (Select) 的方便性,同時又可以彈性客製輸入內容,並且不需要寫 JavaScript 的方式。
說明
controller.cs
ViewBag.ManagementHint = string.Join(", ", db.Website.Select(i => i.Owner).Distinct().ToList());
傳入的方式不一定要用是字串,也可以是 List<String>,但因為是透過 ViewBag 所以沒有 Intellisense,除非是透過 ViewModel 的方式傳入 😅
view.cshtml
<div class="col-md-10">
@Html.EditorFor(model => model.Owner,
new { htmlAttributes = new { @class = "form-control", @list= "managementUnit" } })
@Html.ValidationMessageFor(model => model.Owner, "", new { @class = "text-danger" })
</div>
<datalist id="managementUnit">
@foreach (string unit in ViewBag.ManagementHint.Split(','))
{
<option value="@(unit.Trim())"></option>
}
</datalist>
對於原本的 Html.EditorFor 只需要在 htmlAttributes 加入 @list 對應到 datalist 的 id。
而定義 datalist 則只需要將 ViewBag 或 ViewModel 的資料,迴圈呈現為 <option value="..."></option> 即可。
datalist 的使用仰賴瀏覽器對這個功能的實作,而實際使用上如果透過 Tab 不會觸發提示,但也支援一定程度的模糊提示,更理想的方式是配合 Vue.js 去彈性變更 option 的構成。