asp.net mvc selectlist "{ }" 出现在结果中
asp.net mvc selectlist "{ }" appears in result
我正在开发一个 asp.net mvc 项目。
我已经能够将 table 中的 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);
//Post:/创建
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
参数的 overload 指定您想要的对象的 属性 值和显示文本
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" })
斯蒂芬说的是对的,但让我稍微解释一下。
ViewBag.[VAR] = new SelectList([list], [value], [text]);
使用SelectList
构造函数详解here
SelectList(IEnumerable items, string dataValueField, string dataTextField);
只要您有一个继承 IEnumerable 的集合,它就可以与 select 列表一起使用。 dataValueField
指的是你想让htmlvalue
属性有什么,dataTextField
指的是你想让它显示什么。
这与数据 table 对象一起使用很方便,因为您可以将字段连接为文本。例如:
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" })
我正在开发一个 asp.net mvc 项目。
我已经能够将 table 中的 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);
//Post:/创建
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
参数的 overload 指定您想要的对象的 属性 值和显示文本
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" })
斯蒂芬说的是对的,但让我稍微解释一下。
ViewBag.[VAR] = new SelectList([list], [value], [text]);
使用SelectList
构造函数详解here
SelectList(IEnumerable items, string dataValueField, string dataTextField);
只要您有一个继承 IEnumerable 的集合,它就可以与 select 列表一起使用。 dataValueField
指的是你想让htmlvalue
属性有什么,dataTextField
指的是你想让它显示什么。
这与数据 table 对象一起使用很方便,因为您可以将字段连接为文本。例如:
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" })