c# Razor Pages Select Tag Helper



Razor、c#和ASP的新手,参考以下内容。https://learn.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>

我的问题是生成的选项除了电影之外没有其他值。评级字段(即GOOD、BAD、UGLY(,一切都可以,但当我插入数据库时,我想插入"ID",而不是"MovieRating">

我希望在生成页面时创建以下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();

这里,ratingItemsSelectListItem对象的列表。因此,将Ratings属性类型更改为SelectListItem对象的集合。

public List<SelectListItem> Ratings { get; set; }

最新更新