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该模型中拥有然后强烈键入您的视图的习惯。

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>

ETC..

注意我跳过了一些错误检查等。

要点 - >只通过你需要的东西。

一开始,你可能会说:WTF!这比其他答案长得多!Sif 我想写更多的代码。

对于这种想法,我可以建议的最佳答案是,从长远来看,您会感谢自己养成了这种习惯,因为视图应该只知道它需要的确切数据。不多也不少。发送最少的数据意味着您有一个非常轻松和简单的视图,这将使您的支持/调试更好。接下来,您将能够使用更多智能和智能对您的控制器进行单元测试。

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 回答