【问题标题】:c# Razor Pages Select Tag Helperc# Razor Pages Select Tag Helper
【发布时间】:2018-11-23 03:37:02
【问题描述】:

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 " 而不是 "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。

【问题讨论】:

  • 更改您的查询以获取名称和 id:var ratingQuery = ...select new { m.MovieRating, m.MovieId } 并学习如何从中创建 SelectList。网上有很多例子。

标签: c# visual-studio linq razor


【解决方案1】:

您当前的 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; }

【讨论】:

  • 感谢您的解释,我已经更改了我的代码,现在可以正常工作了。快速提问,我们为什么/应该将 ID 转换为字符串?
  • 使用正确的类型。如果要存储数值,请使用 int
  • 查看Select Tag Helper in ASP.NET Core MVC 了解使用选择标签助手的各种选项
猜你喜欢
  • 2020-01-27
  • 2022-01-12
  • 2021-02-08
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多