Razor,c#和ASP的新功能,并参考以下内容。 https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-2.1
目前,我可以使用Pages代码中的以下代码将模型中的行排列到选择视图中。
public SelectList Ratings { get; set; }
public async Task<IActionResult> OnGetAsync()
{
IQueryable<string> ratingQuery = from m in _context.Ratings
orderby m.MovieRating
select m.MovieRating;
Ratings = new SelectList(await ratingQuery.Distinct().ToListAsync());
return Page();
}
在我的HTML页面参考中,它会产生一个不错的评级列表供您选择。
<select asp-for="Movie.Rating" asp-items="Model.Ratings">
</select>
我的问题是生成的选项没有Movie.Rating字段的值(即GOOD,BAD,UGLY)没有其他值,一切正常,但是当我插入数据库时,我想插入“ ID ”,而不是“电影评分”
我想在生成页面时创建以下html。表中的ID字段是“值”,“ MovieRating”是文本。
<select asp-for="Movie.Rating" asp-items="Model.Ratings">
<option value="1">Good</option>
<option value="2">Bad</option>
<option value="3">Ugly</option>
</select>
为此,我知道我需要选择的内容比select语句中的“ MovieRating”字段更多。因此,我可以将其更改为还选择ID。但是,它只会将组合的字符串吐出到选项字段中,而不会产生值字段。
这是实现我想要做的正确方法。我可以在线找到一些示例,以了解如何以另一种方式实现此目标,但我现在还不想深入研究MVC。
答案 0 :(得分:0)
您当前的LINQ查询正在 SELECT 单个列MovieRating
中,并且您正在使用执行该查询(即字符串列表)的结果来构建{{1 }}对象。您的选择标签帮助器正在使用此SelectList
对象,该对象仅将MovieRating字符串值作为基础项。
假设您的SelectList
类具有Ratings
属性(Id
类型)和int
属性(MovieRating
类型),则可以创建{{1 }}在LINQ表达式的投影部分。
string
此处SelectListItem
是List<SelectListItem> ratingItems = _context.Ratings
.Select(a=>new SelectListItem
{
Value=a.Id.ToString(),
Text = a.MovieRating
}).ToList();
Ratings = ratingItems;
return Page();
对象的列表。因此,将您的ratingItems
属性类型更改为SelectListItem
对象的集合。
Ratings