繁体   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