我在控制器中编写了这段代码
df = df2.loc[df2.groupby(['ANIMAL','AGE_Y'])['AGE_D'].idxmin()]
df = df[['ANIMAL','AGE_Y','AGE_D']]
print (df)
ANIMAL AGE_Y AGE_D
0 1 1 3
3 1 2 377
5 2 1 1
并在视图中
public ActionResult Create()
{
ViewBag.CustomerList = new SelectList(db.Customers.Select(m => new { Id = m.Id, m.Name, m.LastName }));
return View();
}
但是在浏览器中,我在下拉列表中得到了这个结果
如何解决此问题?
答案 0 :(得分:1)
问题是您没有为选择列表的值和文本传递成员名称。默认情况下,它将尝试分别使用名为Value
和Text
的成员,这些成员是您的匿名对象所没有的。如果做不到这一点,它只需在列表中的每个项目上调用ToString
,并将其用于值和文本,这当然就是这里发生的事情。
因此,最简单的解决方法是简单地传递表示成员的字符串以用于值和文本参数:
ViewBag.CustomerList = new SelectList(db.Customers.Select(m => new { Id = m.Id, m.Name, m.LastName }), "Id", "Name");
然而,更好的方法是根本不选择匿名对象并改为使用SelectListItem
:
ViewBag.CustomerList = new SelectList(db.Customers.Select(m => new SelectListItem { Value = m.Id.ToString(), Text = m.Name + " " + m.LastName }));
您会注意到这也使您能够将Name
和LastName
值连在一起,而另一种方法只允许您选择其中一种。
答案 1 :(得分:0)
创建一个ViewModel:
public class CreateViewModel
{
public List<Customer> Customers { get; set; }
public int SelectedId { get; set; }
}
在控制器上:
public ActionResult Create()
{
var model = new CreateViewModel();
model.Customers = db.Customers.TolIst();
return View(model);
}
观看视频:
@Html.DropDownListFor(model => Selected.Id, new SelectList(
Model.Customers,
"Id",
"Name",
Model.SelectedId))
答案 2 :(得分:0)
将控制器代码更改为此
ViewBag.CustomerList = new SelectList(db.Customers.Select(m => new SelectListItem { Value = m.Id.ToString(), Text = m.Name + " " + m.LastName }), "Value", "Text");