2

ASP.NET MVC のビュー ページでクエリの結果を印刷する方法は? 私のコードは次のとおりです。

public ActionResult Index()
{
            var list = from m in db.MenuTables
                       select m.MenuName;

            return View(list);
        }

このクエリの結果をビュー ページに出力するには、何を記述すればよいでしょうか。

4

4 に答える 4

4

個人的にはViewModels、View を持ってから、そのモデルに強く入力する習慣を身につけます。

model、表示したいデータのみを公開します。それ以上でもそれ以下でもありません。名前、価格、その他のメタデータを表示したいとします。

疑似コード ...

//View Model
public class MenuItem
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public bool IsVegetarian { get; set; ]
}

public class IndexViewModel
{
    public IList<MenuItem> MenuItems { get; set; }
    public string MaybeSomeMessage { get; set; }
}

//in Controller
public ActionResult Index()
{
    // This gets the menu items from your db, or cache or whatever.
    var menuItemsFromDb = GetMenuItems(); 


    // Lets start populating the view model.
    IndexViewModel model = new IndexViewModel();    

    // Project the results to your model.
    IList<MenuItems> menuItems = null;
    if (menuItemsFromDb != null)
    {
        model.MenuItems = (from menuItem in menuItemsFromDb
                           select new MenuItem() {
                               Name = menuItem.Name,
                               Price = menuItem.Price,
                               IsVegetarian = menuItem.IsVegetarian
                           }).ToList();
    }

    // Anything else...
    model.MaybeSomeMessage = "Hi There!";

    return View(model);
}

//in View
@model IndexViewModel

<h3>@Model.MaybeSomeMessage</h3>
<ul>
    @foreach(var item in Model.MenuItems)
    {
        <li><a href="#">@item.Name</a> - $ @item.Price</li>
    }
</ul>

等..

エラーチェックなどをスキップしたことに注意してください。

ポイント -> 必要なものだけを渡します。

最初は、次のように言うかもしれません: WTF! それは他の答えよりもずっと長いです!もっとコードを書きたい。

その考えに対して私が提案できる最良の答えは、長い目で見れば、ビューは必要な正確なデータだけを知る必要があるため、この習慣を身につけたことに感謝することです。それ以上でもそれ以下でもありません。最小限のデータを送信すると、非常に軽量でシンプルなビューが得られ、サポート/デバッグが大幅に改善されます。次に、より多くの知性とスマートさを備えたコントローラーを単体テストできるようになります。

GL!

于 2013-03-08T21:21:13.227 に答える
1

listそれが文字列であると仮定しIEnumerableます (つまり、MenuName は文字列です)。

あなたの見解では、モデルを受け入れますIEnumerable<string>

@model IEnumerable<string>

そしてそれを列挙します

@foreach( string s in Model )
{
 <div>
  @s
 </div>
}
于 2013-03-08T21:08:26.803 に答える
0

最初に実行したいのはToList()を呼び出すことです。そうしないと、同じSQLクエリを複数回実行する可能性があります。

   public ActionResult Index()
   { 
        var list = (from m in db.MenuTables
                   select m.MenuName).ToList();

        return View(list);
    }

第二に、私はそのような完全なリストを渡すだけではありません。ViewModelを作成する必要があります。これにより、後から少ない労力でより多くのデータを渡すことができます。

     public ActionResult Index()
     {
        var model = new IndexModel();
        model.Tables = db.MenuTables.ToList();
        model.AnotherValue = "MENUS";

        return View(model);
     }

これでビューが表示されます。モデルを設定してテーブルを反復処理する必要があります。

 @model IndexModel

 <h3>@Model.AnotherValue</h3>
 <ul>
 @foreach( var table in Model.Tables) {
     <li>@table.Name<li>
 }
 </ul>
于 2013-03-08T21:15:47.107 に答える
0
     public ActionResult Index()
    {
        var list = from m in db.MenuTables
                   select m.MenuName;

        return View(list);
    }

    //In View

    @model IEnumerable<ProjectName.models.MenuTables>

    @foreach(var item in Model)
    { 
        @item.Field_Name
    }
于 2016-11-09T11:30:12.400 に答える