0
public class Movies
{
    [Key]
    public int movieID { get; set; }

    public String Title { get; set; }

    public virtual Genres parentGenre { get; set; }
}


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

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

    public String genreName { get; set; }

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

Genres テーブルを読み取ることで、addmovie ビュー ページに DropDownList を正常に作成できます。

しかし、ページを送信しようとすると、「値 '10' は無効です」と表示されます。これにより、(ドロップダウンリストの値から) Int を (「Genres parentGenre」から) オブジェクトに入れようとしていると思われます。

「genresparentGenre」から「genreId」への外部キー関係を、「parentGenre」フィールドの「番号」のみが必要な場所に正しく設定しましたか、それともそれ以上を期待していますか?

追加した:

コントローラ:

    [HttpPost]
    public ActionResult Create(Movies movies)
    {
        if (ModelState.IsValid)
        {
            db.Movies.Add(movies);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }
        IEnumerable<SelectListItem> items = db.Genres
            .Select(c => new SelectListItem
                            {
                                Value = SqlFunctions.StringConvert((double)c.genreId).Trim(),
                                Text = c.genreName
                            });
        ViewBag.genreId = items;
    }

見る:

    <div class="editor-label">
        @Html.LabelFor(model => model.parentGenre.genreName)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.parentGenre,(IEnumerable<SelectListItem>)ViewBag.genreId)
        @Html.ValidationMessageFor(model => model.parentGenre)
4

1 に答える 1

1

あなたのコメントの代わりに、私がお勧めするのは次のとおりです。

モデル:

public class Movie
    {
        [Key]
        public int MovieID { get; set; }

        public String Title { get; set; }

        public int GenreId { get; set; }

        public virtual Genre Genre { get; set; }
}

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

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

    public String Name { get; set; }

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

コントローラ:

[HttpPost]
public ActionResult Create(Movie Movie)
{
    if (ModelState.IsValid)
    {
        db.Movies.Add(Movie);
        db.SaveChanges();
        return RedirectToAction("Index");  
    }
    IEnumerable<SelectListItem> items = db.Genres
        .Select(c => new SelectListItem
                        {
                            Value = SqlFunctions.StringConvert((double)c.GenreId).Trim(),
                            Text = c.Name
                        });
    ViewBag.genreId = items;
}

意見:

<div class="editor-label">
    @Html.LabelFor(model => model.Genre.Name)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.Genre.Id,(IEnumerable<SelectListItem>)ViewBag.genreId)
    @Html.ValidationMessageFor(model => model.Genre)
</div>

あなたが正しくやっていることを読んでいるなら、それはうまくいくはずですただし、私は EF をあまり使用していないため、100% 確実とは言えません。

于 2013-03-24T21:28:45.600 に答える