簡體   English   中英

asp.net mvc選擇列表“ {}”出現在結果中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM