[英]asp.net mvc selectlist “{ }” appears in result
我正在asp.net mvc項目上。
我已經能夠將表中的2個字段組合到一個下拉列表中。 但是,在創建視圖和索引視圖中,我都得到了這些“ {}”括號,並且我不知道如何擺脫它們。
控制器://獲取:/創建
var units = db.EquipmentLists
.Where(s => s.Unit != null)
.OrderBy(s => s.Unit)
.Select(s => new
{
Description = s.Unit + " - " + s.MakeModel
}).ToList();
ViewBag.Units = new SelectList(units);
//發布:/ Create
ViewBag.Units = new SelectList(db.EquipmentLists.OrderBy(x => x.Unit + " - " + x.MakeModel));
Create.cshtml
@Html.DropDownListFor(model => model.Unit, (SelectList)ViewBag.Units, "Select one...", htmlAttributes: new { @class = "form-control" })
不知道為什么我在視圖中出現了"{ }"
括號。 只想擺脫他們。 任何幫助,將不勝感激。
您的查詢正在創建一個帶有名為Description
的屬性的匿名對象。
當將SelectList
構造函數與單個參數(參數為IEnumerable
)一起使用時,該方法將對集合中的每個項目調用.ToString()
以生成值並顯示每個選項的文本),並且僅適用於集合包含簡單類型(例如IEnumerable<string>
或IEnumerable<int>
)
更改構造函數以為您的對象指定所需的屬性值,並使用接受dataValueField,
和dataTextField
參數的重載來顯示文本
ViewBag.Units = new SelectList(units, "Description", "Description");
或者,您可以直接使用來創建IEnumerable<SelectListItem>
ViewBag.Units = db.EquipmentLists
.Where(s => s.Unit != null)
.OrderBy(s => s.Unit)
.Select(s => new SelectListItem
{
Value = s.Unit + " - " + s.MakeModel,
Text = s.Unit + " - " + s.MakeModel,
});
並將視圖調整為
@Html.DropDownListFor(m => m.Unit, (IEnumerable<SelectListItem>)ViewBag.Units, "Select one...", new { @class = "form-control" })
史蒂芬(Stephan)所說的是正確的,但讓我詳細解釋一下。
ViewBag.[VAR] = new SelectList([list], [value], [text]);
使用此處詳細介紹的SelectList
構造函數
SelectList(IEnumerable items, string dataValueField, string dataTextField);
只要您有一個繼承IEnumerable的集合,它將與選擇列表一起使用。 dataValueField
表示您想要html value
屬性具有的任何內容, dataTextField
表示您希望其顯示的任何內容。
與數據表對象一起使用時,這很方便,因為您可以將字段串聯為文本。 例如:
public class Obj1
{
public int id {get; set}
public string field1 {get; set;}
public string field2 {get; set;}
public string DisplayField {get {return field1 + " " + field2;}}
}
//In your controller
public ActionResult Create()
{
...other code
List<Obj1> list = GetAllObj1(); //however you get the fields
ViewBag.Fields = new SelectList(list, "id", "DisplayField");
return View();
} ...
希望這會有所幫助。
請在控制器端使用以下代碼ViewBag.Units = db.EquipmentLists.Select(s => new SelectListItem {Value = s.Unit +“-” + s.MakeModel,Text = s.Unit +“-” + s.MakeModel });
並在視圖側的@ Html.DropDownListFor(m => m.Unit,(IEnumerable)ViewBag.Units,“ Select one ...”,new {@ class =“ form-control”})中使用以下行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.