【问题标题】:How to pass List from Controller to View in MVC 3如何在 MVC 3 中将列表从控制器传递到视图
【发布时间】:2012-06-12 10:28:27
【问题描述】:

我有一个 List 与 Controller 操作中的一些数据绑定,我想将该 List 传递给 View 以与 Razor View 中的 DataGrid 绑定。

我是MVC的新手。谁能帮我如何通过以及如何在View中访问。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    将数据传递给视图就像将对象传递给方法一样简单。看一眼 Controller.View Method

    protected internal ViewResult View(
        Object model
    )
    

    类似的东西

    //controller
    
    List<MyObject> list = new List<MyObject>();
    
    return View(list);
    
    
    //view
    
    @model List<MyObject>
    
    // and property Model is type of List<MyObject>
    
    @foreach(var item in Model)
    {
        <span>@item.Name</span>
    }
    

    【讨论】:

    • 当我有 @Model 而不是 @model 时为我工作。
    • 如果您想从控制器发送 2 个单独的列表以供查看,该怎么办?
    • 您应该创建具有两个 List 属性的 ViewModel 类并将该类的实例传递给查看
    • 是否有任何方法可以在没有 foreach 循环的情况下获取数据,我们只需编写 model => model.Data @archil
    【解决方案2】:

    我这样做了;

    在控制器中:

    public ActionResult Index()
    {
      var invoices = db.Invoices;
    
      var categories = db.Categories.ToList();
      ViewData["MyData"] = categories; // Send this list to the view
    
      return View(invoices.ToList());
    }
    

    在视图中:

    @model IEnumerable<abc.Models.Invoice>
    
    @{
        ViewBag.Title = "Invoices";
    }
    
    @{
      var categories = (List<Category>) ViewData["MyData"]; // Cast the list
    }
    
    @foreach (var c in @categories) // Print the list
    {
      @Html.Label(c.Name);
    }
    
    <table>
        ...
        @foreach (var item in Model) 
        {
          ...
        }
    </table>
    

    希望对你有帮助

    【讨论】:

    • 如果你想从控制器向视图发送 2 个单独的列表怎么办?
    • 嗨@RehanKhan,我认为你应该制作2个具有2个不同名称的视图数据。 ViewData["MyList1"] 和 ViewData["MyList2"] 最好的问候。
    【解决方案3】:

    您可以使用动态对象ViewBag 将数据从控制器传递到视图。

    将以下内容添加到您的控制器:

    ViewBag.MyList = myList;
    

    然后你可以从你的视图中访问它:

    @ViewBag.MyList
    
    // e.g.
    @foreach (var item in ViewBag.MyList) { ... }
    

    【讨论】:

    • 这是数据从控制器传递到视图的最糟糕方式
    • 是的,但这也是最简单的。
    • 我不同意。带 viewbag 的魔术字符串比 return View(model) 容易吗?
    • 这是一个复杂的背景魔法,肯定不是万无一失的。但从初学者的 POV 来看,这是最简单的解决方案之一。我更喜欢你的回答,很乐意给它+1,但我会留作参考。
    • 我强烈反对使用 viewbag/viewdata,并且更喜欢使用 viewmodels :)
    【解决方案4】:
    1. 创建一个模型,其中包含您的列表和视图所需的其他内容。

      例如:

      public class MyModel
      {
          public List<string> _MyList { get; set; }
      }
      
    2. 从 action 方法中把你想要的列表放到 Model 中,_MyList 属性,比如:

      public ActionResult ArticleList(MyModel model)
      {
          model._MyList = new List<string>{"item1","item2","item3"};
          return PartialView(@"~/Views/Home/MyView.cshtml", model);
      }
      
    3. 在您的视图中按如下方式访问模型

      @model MyModel
      foreach (var item in Model)
      {
         <div>@item</div>
      }
      

    我认为这将有助于开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多