[英]Multi select drop down list for enum
我可以通過哪種方式實現枚舉值的下拉列表?
我有這樣的枚舉:
public enum ValueEnum : byte
{
[Description("Value 1")]
Value1 = 1,
[Description("Value 2")]
Value2 = 2,
[Description("Value 3")]
Value3 = 4
}
我想從服務器端的多個選擇而不是選定值列表中獲取單個值:
public ActionResult ValueAction(ValueEnum result)
{
//too many code
return View();
}
結果可以是ValueEnum.Value1
或ValueEnum.Value1 | ValueEnum.Value3
ValueEnum.Value1 | ValueEnum.Value3
沒有客戶端總和,有沒有辦法做到這一點?
我在客戶端解決了以下行為:
Get
方法:
[HttpGet]
public ActionResult ValueAction(ValueEnum result)
{
//irrelevant code
ViewBag.Values = Enum.GetValues(typeof(ValueEnum))
.OfType<ValueEnum>()
.Select(x => new SelectListItem
{
Text = x.GetCustomAttribute<DescriptionAttribute>().Description,
Value = ((byte)x).ToString()
});
return View();
}
剃刀:
@using(Html.BeginForm())
{
@*irrelevant code*@
@Html.DropDownList("valueEnum", (IEnumerable<SelectListItem>)ViewBag.Values, new { multiple="multiple", id="enumValues" })
@*Here would be stored result value for this flagged enum*@
<input type='hidden' name='resultValue' id='hidden-enum-value' />
@*irrelevant code*@
<input type="submit" value="Submit" />
}
JS:
$(function() {
$('form').submit(function() {
var vals = $('#enumValues').val();
var result = 0;
for(let i = 0; i < vals.length; i++) {
result += Number(vals[i]);
}
$('#hidden-enum-value').val(result);
});
});
Post
方式:
[HttpPost]
public ActionResult ValueAction(ValueEnum resultValue)
{
//irrelevant code
return View();
}
您創建一個列表你的枚舉像這樣的線索暗示或這一個 ,做一個新的SelectList與它保持在一個ViewBag,然后在您的視圖做一個DropDownList或DropDownListFor幫手,並使用相同的名稱為兩個ViewBag變量對於選擇元素。
//GET: ~/ValueController/ValueAction
public ActionResult ValueAction() {
Array values = Enum.GetValues(typeof(ValueEnum));
List<ListItem> items = new List<ListItem>(values.Length);
foreach(var i in values)
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(ValueEnum), i),
Value = ((int)i).ToString()
});
}
ViewBag.valueEnum = new SelectList(items);
}
視圖:
@Html.DropDownList("valueEnum", null, htmlAttributes: new { @class = "form-control" })
然后,MVC將自動將ViewBag內容分配給select元素。
然后在Post Action中設置其參數以接收一個簡單的整數。
//POST: ~/ValueController/ValueAction
[HttpPost]
public ActionResult ValueAction(int valueEnum) {
//less code
return View();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.