c#Razor Pages选择标签助手

时间:2018-11-22 19:15:55

标签: c# visual-studio linq razor

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。

1 个答案:

答案 0 :(得分:0)

您当前的LINQ查询正在 SELECT 单个列MovieRating中,并且您正在使用执行该查询(即字符串列表)的结果来构建{{1 }}对象。您的选择标签帮助器正在使用此SelectList对象,该对象仅将MovieRating字符串值作为基础项。

假设您的SelectList类具有Ratings属性(Id类型)和int属性(MovieRating类型),则可以创建{{1 }}在LINQ表达式的投影部分。

string

此处SelectListItemList<SelectListItem> ratingItems = _context.Ratings .Select(a=>new SelectListItem { Value=a.Id.ToString(), Text = a.MovieRating }).ToList(); Ratings = ratingItems; return Page(); 对象的列表。因此,将您的ratingItems属性类型更改为SelectListItem对象的集合。

Ratings