c # Razor Pages Выбрать Tag Helper - PullRequest
0 голосов
/ 22 ноября 2018

Новое в Razor, c # и ASP и со ссылкой на следующее.https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/?view=aspnetcore-2.1

В настоящее время я могу упорядочить строки из моей модели в представлении выбора, используя следующий код в моем коде страниц.

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 при создании страницы.Где поле идентификатора в таблице - это значение, а «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> 

Чтобы сделать это, я знаю, что мне нужно выбрать больше, чем поле «MovieRating» в пределах выбора.заявление.Так что я могу изменить это, чтобы также выбрать идентификатор.Однако он просто выдаст объединенную строку в поле параметра и не создаст поле значения.

Это правильный метод для достижения того, что я хочу сделать.Я могу найти несколько примеров того, как этого добиться другим способом, но пока не хочу углубляться в MVC.

1 Ответ

0 голосов
/ 22 ноября 2018

Ваш текущий запрос LINQ SELECT в одном столбце, MovieRating, и вы используете результат выполнения этого запроса, представляющий собой список строк, для создания объекта SelectList.Ваш помощник по тегу select использует этот SelectList объект, который имеет только строковые значения MovieRating в качестве базовых элементов.

Предполагая, что ваш класс Ratings имеет свойство Id (тип int) и MovieRating свойство (string тип), вы можете создать SelectListItem в проекционной части вашего выражения LINQ.

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...