1

MVC3を学び始めたばかりです。しばらくの間、従来の ASP.NET でコーディングを行ってきましたが、現在は MVC に移行したいと考えています。

私が理解していないいくつかのこと(おそらく、従来のASP.NETとは異なる方法で使用されているだけです)

ニュースを表示し、コメントを挿入できる単純なニュース モジュールを作成しようとしています。

最初のステップは、SQL サーバーにテーブルを作成することです: TblNews TblCategories TblComments

ModelsフォルダーにLinq2SQLデータクラスを作成し、News.dbmlという名前を付けましたコントローラーHomeController.csを作成し、その中にIndex()というメソッドを作成しました。こんな風に見える:

public ActionResult Index()
        {
            Models.NewsDataContext db = new Models.NewsDataContext();
            var Model = (from n in db.TblNews
                         select new
                         {
                             ID = n.ID,
                             Title = n.Title,
                             Description = n.Description,
                             Category = n.TblCategory.CategoryName
                         });

            return View(Model);
        }

ご覧のとおり、すべてのニュースとそのカテゴリ名を選択しようとしています (TblNews と TblCategories の間には関係があります)。

その後、クエリから取得したデータを返します。

ビューには次のものがあります。

@{
    ViewBag.Title = "News Index Page";
}

<table>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                ID: @item.ID<br />
                Title: @item.Title<br />
                Description: @item.Description<br />
                Category: @item.Category
            </td>
        </tr>
    }
</table>

次のようなものが返されます。

ID: 4
Title: asd
Description: asd
Category: 2

それがテーブルからの私のサンプルデータです。

ページを実行すると、エラー メッセージが表示されます。

'object' does not contain a definition for 'ID'

しかし、マウスを「アイテム」変数にフォーカスすると、実際には次のものが含まれます。

{ ID = 4, Title = asd, Description = asd, Category = Test2 }

また、末尾に .ToList() を追加して、Linq Query をリストとして返そうとしました。

誰かが私にヒントを与えて、正しい方向に導くことができますか?

私が何か間違って説明した場合は申し訳ありません。英語は私の第一言語ではありません。さらに情報が必要な場合はお尋ねください。

どうもありがとうございました。

PS私はVisual Studio 2012を使用しています

4

1 に答える 1

0

ビューの上部にモデル宣言がないため、デフォルトで type になりますobject。あなたitem.IDがやっているとき、それがの定義が含まれていないobject.IDと文句を言うのはそのためですobjectID

以下を追加します。

@model List<Models.NewsDataContext>

また、モデルを返す前に呼び出して LINQ クエリを評価.ToList()するようにしてください。これにより、クエリはビューに到達する前にデータベースに対して実行されます。

return View(Model.ToList());

編集:実際には、LINQ クエリで匿名型を選択しています。これをビューで使用するには、具象クラスを使用する必要がありますTblNews以下は、あなたがと呼ばれるクラスに対応していると仮定していますNews:

var Model = (from n in db.TblNews
                     select new News //class name here
                     {
                         ID = n.ID,
                         Title = n.Title,
                         Description = n.Description,
                         Category = n.TblCategory.CategoryName
                     });

        return View(Model.ToList());

次に、モデルを次のように変更します。

@model List<News>
于 2013-02-26T11:13:13.840 に答える