如何在ASP.NET MVC的View页面中打印查询结果? 我的代码是:
public ActionResult Index()
{
var list = from m in db.MenuTables
select m.MenuName;
return View(list);
}
现在应该写什么来在View Page中打印此查询的结果?
答案 0 :(得分: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>
等。
注意我已经跳过了一些错误检查等等。
要点 - &gt;只传递你需要的东西。
首先,你可能会去:WTF!那是SOOO比其他答案长得多!我想写更多代码。
我可以向这个想法提出的最佳答案是,从长远来看,你会感谢你养成这个习惯,因为视图应该只知道完全数据这个需要。没有更多,没有更少。发送最少量的数据意味着您拥有一个非常简单的视图,这将使您的支持/调试更好。接下来,当你达到这个目标时,你将能够以更多的智能和智慧对你的控制器进行单元测试。
GL!
答案 1 :(得分:1)
假设list
是IEnumerable
个字符串(即MenuName是一个字符串)。
在您的视图中,接受模型IEnumerable<string>
@model IEnumerable<string>
然后枚举它
@foreach( string s in Model )
{
<div>
@s
</div>
}
答案 2 :(得分: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>
答案 3 :(得分: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
}