ASP.NET MVC - 从下拉列表中获取Id

时间:2017-10-13 10:03:37

标签: c# asp.net asp.net-mvc

我是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而不是字符串,但仍然希望在从下拉列表中选择时查看我的字符串...但不知道如何。

3 个答案:

答案 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中,您可以传递要绑定的属性下拉列表valuetext属性。

 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

中绑定它