我是ASP.NET MVC的新手,我遇到了问题。我需要得到一个字符串"类别"从下拉列表中,这是我的代码:
var CList = new List<string>();
StreetFooder sf = db.StreetFooders.Single(s => s.User.UserName == this.User.Identity.Name);
var Cqry = from d in db.Categories
where !d.IsDeleted && d.StreetFooder.Id == sf.Id
orderby d.Name
select d.Name;
CList.AddRange(Cqry.Distinct());
ViewBag.CategoryList = new SelectList(CList);
观点:
<div class="col-md-10">
@Html.DropDownListFor(model => model.Category, (SelectList)ViewBag.CategoryList, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Category, "", new { @class = "text-danger" })
</div>
这对我有用。在那之后,我意识到我犯了一个错误并改变了我的字符串Category属性:
public virtual Categories Type { get; set; }
现在我想在我的数据库中保存ID而不是字符串,但仍然希望在从下拉列表中选择时查看我的字符串...但不知道如何。
答案 0 :(得分:1)
使用SelectListItem
创建SelectList,您可以在其中指定Value
=您的ID和Text
=显示文字
https://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.118).aspx
var CList = new List<SelectListItem>();
StreetFooder sf = db.StreetFooders.Single(s => s.User.UserName == this.User.Identity.Name);
var Cqry = from d in db.Categories
where !d.IsDeleted && d.StreetFooder.Id == sf.Id
orderby d.Name
select d;
CList.AddRange(Cqry.Distinct().Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = d.Name
}));
ViewBag.CategoryList = new SelectList(CList);
如果我没记错的话,您甚至可以省略使用SelectList
并简单地传递List<SelectListItem>
。
答案 1 :(得分:0)
试试这个:
var cqry = from d in db.Categories
where !d.IsDeleted && d.StreetFooder.Id == sf.Id
orderby d.Name
select new { Id = d.StreetFooder.Id, Value = d.Name};
ViewBag.CategoryList = new SelectList(cqry.Distinct(), "Id", "Value");
您还需要定义Id
并将其传递给DropDownList
。这将使用列表(SelectList
)的指定项,数据值字段(cquery
)和数据文本字段({{)初始化Id
类的新实例。 1}})并添加到您Value
然后将其绑定到ViewBag
。
您可以在View上使用它:
DropDownList
如果您在结果上有重复项,则 @Html.DropDownList("CategoryList ", null, new { @class = "form-control" })
将起作用,这意味着集合中的cqry.Distinct()
和Id
相同,如果您只需要按名称区分,则需要使用Value
。
答案 2 :(得分:0)
在selectList中,您可以传递要绑定的属性下拉列表value
和text
属性。
var Cqry = from d in db.Categories
where !d.IsDeleted && d.StreetFooder.Id == sf.Id
group d by new { names.Name } into nameGroup
select new { Name = nameGroup.Name, Id = nameGroup.FirstOrDefault().StreetFooder.Id};
ViewBag.CategoryList = new SelectList(Cqry,"Id","Name");
您选择了Distinct
名称,所以我在这里按名称使用。
因为我创建了具有属性“Id”和Name
的匿名对象。现在,您可以在SelectList
。