[英]c# Razor Pages Select Tag Helper
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。
当前的LINQ查询正在SELECT单个列MovieRating
并且您正在使用执行该查询的结果(即字符串列表)来构建SelectList
对象。 您的选择标签帮助器正在使用此SelectList
对象,该对象仅将MovieRating字符串值作为基础项。
假设您的Ratings
类具有Id
属性( int
类型)和MovieRating
属性( string
类型),则可以在LINQ表达式的投影部分中创建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
属性类型更改为SelectListItem
对象的集合。
public List<SelectListItem> Ratings { get; set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.