2

私はこれに数日間苦労しています。ドロップダウンリストにジャンルを入力する必要があります。

ジャンルをつかむための私のMovieRepository:

public IQueryable<Movies> MoviesAndGenres
{
        get { return db.Movies.Include(m => m.parentGenre); }
}

私の映画モデル

public virtual Genres parentGenre { get; set; }

ジャンルモデル:

public class Genres
{
    public Genres()
    {
        this.movies = new HashSet<Movies>();
    }

    [Key]
    public int genreId { get; set; }

    [Required(ErrorMessage = "A genre name is required")]
    [StringLength(25)]
    public String genreName { get; set; }

    public ICollection<Movies> movies { get; set; }
}

選択リストを使用してジャンルを渡そうとしていますが、LINQ toEntitiesがSystem.StringToString()メソッドを認識せず、このメソッドを保存された式に変換できません。

ムービーコントローラー、addMovieアクション:

ViewBag.Genres = movieRepository.MoviesAndGenres.Select(m => new SelectListItem 
        {
            Text = m.parentGenre.genreName,
            Value = m.parentGenre.genreId.ToString()
        }).ToList();

        return View();

意見:

@Html.DropDownListFor(m => m.parentGenre, (SelectList)ViewBag.Genres)

どんな助けでも大歓迎です!


アップデート:

リポジトリ:

public IQueryable<Genres> MoviesAndGenres
{
        get { return db.Genres; }
}

コントローラ:

var x = movieRepository.MoviesAndGenres.Select(m => new 
        {
            Text = m.genreName,
            Value = m.genreId
        });

        ViewBag.Genres = new SelectList(x);
        return View();

意見:

   @Html.DropDownListFor(m => m.parentGenre, (SelectList)ViewBag.Genres)    
4

1 に答える 1

3

とにかくすべてのレコードを取得しているので、これを行うだけです。

ViewBag.Genres = movieRepository.MoviesAndGenres.AsEnumerable()
    .Select(m => new SelectListItem 
    {
        Text = m.parentGenre.genreName,
        Value = m.parentGenre.genreId.ToString()
    });

ビューを次のように変更する必要もあります。

@Html.DropDownListFor(m => m.parentGenre, new SelectList(ViewBag.Genres))

実際には、必要な特定の列のみを取得するため、より良いアプローチはおそらくこれです。

var x = movieRepository.MoviesAndGenres.Select(m => new 
    {
        Text = m.parentGenre.genreName,
        Value = m.parentGenre.genreId
    });

ViewBag.Genres = new SelectList(x)

また、ToList() は既に即時状態になっているため、不要になりました。

于 2013-03-23T17:15:40.787 に答える