2011-02-01 14 views
2

MVC 3の新しいチュートリアル(musicstore)をwww.asp.netで完成しました。 2つのドロップダウンボックスをデータベースから取り込むべき部分を除いて、すべてうまくいった。ASP.NET MVC 3アプリケーションのドロップダウンボックスに問題が発生しました

私はチュートリアルに続き、自分のコードをダブルチェックしました。問題はeditorstemplateフォルダを使用している可能性があります。 Im以来、本当にアイデアMVCに新しい。だから、問題は何ですか?または、どのように私はそれをデバッグできますか?

==============

編集1

いいので、ここで/ビュー/共有/ editortemplatesであるalbum.cshtmlためのコードの一部であります私は実際にDから離れてすべてのエラーを得ることはありません

public ActionResult Edit(int id) 
{ ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList(); ViewBag.Artists = storeDB.Artists.OrderBy(a => a.Name).ToList(); 
var album = storeDB.Albums.Single(a => a.AlbumId == id); 
return View(album); 
} 

:/フォルダ

私は信じて
@model MvcMusicStore.Models.Album 
<p> @Html.LabelFor(model => model.Genre) @Html.DropDownList("GenreId", 
new SelectList(ViewBag.Genres as System.Collections.IEnumerable, 
"GenreId", "Name", Model.GenreId)) 
</p> 
<p> @Html.LabelFor(model => model.Artist) @Html.DropDownList("ArtistId", 
new SelectList(ViewBag.Artists as System.Collections.IEnumerable, 
"ArtistId", "Name", Model.ArtistId)) 
</p> 

がから移入されましたropdownsが移入されていません...

==============

編集2

ので、私は/ビュー/ storemanager /編集にedit.cshtmlを持っています。 cshtmlを開き、次に/views/shared/editortemplates/album.cshtmlにalbum.cshtmlを持っています。ドロップダウンは、album.cshtmlからedit.cshtmlに読み込まれます。私はalbum.cshtmlのコードをedit.cshtmlに直接入れても問題ありません。ですから、問題は、editortemplates/album.cshtmlが動作していない、つまりedit.cshtmlページを設定しているということです。だから何を与える?おかげで...私は問題を発見

==============

編集3

[OK]を、私はCodePlexのからの作業ソースを得ました。私はcreate.cshtmlとedit.cshtmlのページを正しく設定していないようです。 とにかくすべてが今固定されているので、ありがとう...

+3

いくつかのコードを投稿できますか? – ajma

+0

またはエラーが表示されますか? –

+0

プレスF5 =デバッグ – Marc

答えて

13

ViewBagを使用することは避けてください。

public class AlbumViewModel 
{ 
    public string GenreId { get; set; } 
    public IEnumerable<Genre> Genres { get; set; } 

    public string ArtistId { get; set; } 
    public IEnumerable<Artist> Artists { get; set; } 

    public Album Album { get; set; } 
} 

してからコントローラのアクション内で使用すると、このビューモデル移入ます:

public ActionResult Edit(int id) 
{ 
    var model = new AlbumViewModel 
    { 
     Genres = storeDB.Genres.OrderBy(g => g.Name), 
     Artists = storeDB.Artists.OrderBy(a => a.Name), 
     Album = storeDB.Albums.Single(a => a.AlbumId == id) 
    }; 
    return View(model); 
} 

、最終的には自分のエディタのテンプレートで(~/Views/Shared/EditorTemplates/AlbumViewModel.cshtml):

@model MvcMusicStore.Models.AlbumViewModel 
<p> 
    @Html.LabelFor(model => model.GenreId) 
    @Html.DropDownListFor(x => x.GenreId, new SelectList(Model.Genres, "GenreId", "Name")) 
</p> 

<p> 
    @Html.LabelFor(model => model.ArtistId) 
    @Html.DropDownListFor(x => x.ArtistId, new SelectList(Model.Artists, "ArtistId", "Name")) 
</p> 
をですから、ビューモデルを定義することによって開始します
+0

このコメントを削除 –

+0

これはなぜですか?動的な型を除くviewdataのラッパーだけはviewbagではありませんか? @Darin Dimitrov –

+1

ViewModelは強く型付けされているので、ViewModelのアプローチはViewData/ViewBagを使用するよりも好ましいと思います。トピックのいくつかの参照:http://nerddinnerbook.s3.amazonaws.com/Part6.htmとhttp:// stackoverflow。com/questions/1004948/to-use-viewdata-or-not-use-viewdata –

0

私は問題を見つけました。私はCodePlexの作業ソースを入手しました。私はcreate.cshtmlとedit.cshtmlのページを正しく設定していないようです。とにかく、すべての今、ありがとう...固定