Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC将查询结果从控制器传递到视图_Asp.net_Asp.net Mvc - Fatal编程技术网

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

如何在ASP.NET MVC的查看页面中打印查询结果? 我的代码是:

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
    }