ASP.NET MVC将查询结果从控制器传递到视图
如何在ASP.NET MVC的查看页面中打印查询结果? 我的代码是:ASP.NET MVC将查询结果从控制器传递到视图,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,如何在ASP.NET MVC的查看页面中打印查询结果? 我的代码是: public ActionResult Index() { var list = from m in db.MenuTables select m.MenuName; return View(list); } 现在,我应该写什么来在视图页面中打印此查询的结果呢?假设列表是字符串的IEnumerable(即MenuN
public ActionResult Index()
{
var list = from m in db.MenuTables
select m.MenuName;
return View(list);
}
现在,我应该写什么来在视图页面中打印此查询的结果呢?假设
列表
是字符串的IEnumerable
(即MenuName是字符串)
在您看来,接受模型IEnumerable
@model IEnumerable
然后列举它
@foreach( string s in Model )
{
<div>
@s
</div>
}
@foreach(模型中的字符串s)
{
@
}
您要做的第一件事是调用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>
@model IndexModel
@模型。另一个值
@foreach(Model.Tables中的var表){
- @表.名称
-
}
就我个人而言,我习惯于使用视图模型
,然后在该模型上大力键入您的视图
模型
将只显示您想要显示的数据。不多不少。
因此,让我们假设您想要显示名称、价格和一些其他元数据
伪代码
//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>
//视图模型
公共类菜单项
{
公共字符串名称{get;set;}
公共十进制价格{get;set;}
公共布尔是素食者{get;set;]
}
公共类索引模型
{
公共IList菜单项{get;set;}
公共字符串可能是somemessage{get;set;}
}
//内部控制器
公共行动结果索引()
{
//这将从数据库、缓存或其他地方获取菜单项。
var menuItemsFromDb=GetMenuItems();
//让我们开始填充视图模型。
IndexViewModel model=新的IndexViewModel();
//将结果投影到模型中。
IList menuItems=null;
if(menuItemsFromDb!=null)
{
model.MenuItems=(来自menuItemsFromDb中的menuItem
选择新菜单项(){
Name=menuItem.Name,
价格=菜单项价格,
Is素食主义者
}).ToList();
}
//还有什么。。。
model.MaybeSomeMessage=“你好!”;
返回视图(模型);
}
//鉴于
@模型索引模型
@Model.MaybeSomeMessage
@foreach(Model.MenuItems中的var项)
{
- -$@item.Price
}
等等
注意,我跳过了一些错误检查等
点->只传递你需要的东西
首先,你可能会说:WTF!这比其他答案要长得多!如果我想写更多的代码
对于这种想法,我能给出的最好答案是,从长远来看,你会感谢自己养成了这样的习惯,因为视图应该只知道它所需要的确切数据。不多不少。发送最少的数据意味着你有一个非常轻巧和简单的视图,这将使你的支持/调试更加容易更好。下一步,当你做到这一点时,你将能够用更多的智能和智慧对你的控制器进行单元测试
GL!公共行动结果索引()
{
var list=从db.MenuTables中的m开始
选择m.MenuName;
返回视图(列表);
}
//鉴于
@模型IEnumerable
@foreach(模型中的var项目)
{
@item.Field\u名称
}
//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>
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
}