2014-11-24 43 views
0

我在我的MVC 5应用程序中有一个下拉列表,这是一个从1到10的评分等级,但是10低于1而不是列表的末尾。所以列表运行1,10,2,3等。有没有办法纠正这个问题?我的列表没有硬编码,它是从数据库填充的。如何在MVC 5中对我的下拉列表进行重新排序?

下面是下拉列表我的MVC代码:

@Html.LabelFor(model => model.Rating, "Rating", new { @class = "control-label col-md-4" }) 

@Html.DropDownList("Rating", String.Empty) 
@Html.ValidationMessageFor(model => model.Rating) 
+0

通过将值转换为整数而不是字符串对服务器进行排序,然后返回集合。 – 2014-11-24 11:59:56

+0

下拉菜单中的项目将以您从数据库中返回的顺序呈现。 – 2014-11-24 12:00:05

+0

我在数据库中的值是tinyint评级指数,nvarchar是评级表中的评级,这与我的主表中的评级值相同。我试着改变评级表中的下拉顺序,但它只是恢复到1,10,2等等 – Scanner 2014-11-24 12:14:40

回答

3

转换到下拉列表之前,就对它们进行排序。

var values = db.Rating.OrderByDescending(o => o.Rate).ToList(); 
var dropdownlist = values.Select(s => new SelectListItem{Value = s.Rate.ToString(), Name = s.Name}).ToList(); 
ViewBag.List = dropdownlist; 

//in your view 
Html.DropwDownList("Rating", (List<SelectListItem>)ViewBag.List); 

如果您的评分以字符串形式存储,那么您应该在排序前将其转换为int。试试这个:

var values = db.Rating.Select(s => new {Rate = Convert.ToInt32(s.Rate}, Id = s.Id).OrderByDescending(o => o.Rate).ToList(); 
+0

感谢您的回答Vsevolod,我很新,可以告诉我在哪里放前三行的代码? – Scanner 2014-11-24 12:29:13

+0

@Scanner前两行应该在您的控制器或服务或您获取数据的任何地方。第三行将在你控制器行动 – 2014-11-24 12:32:34

+0

这很好,再次感谢Vsevolod。对不起是一个害虫,它订购我的清单,但10仍然是第二个项目,而不是最后一个项目。 – Scanner 2014-11-24 12:45:54

相关问题