繁体   English   中英

c#Razor Pages选择标签助手

[英]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();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM