【问题标题】:Display results of two queries in view using asp.net MVC2使用asp.net MVC2在视图中显示两个查询的结果
【发布时间】:2010-10-06 13:35:01
【问题描述】:

我有这个有效的代码。

public class HelloWorldController : Controller
{
    UAStagingEntities db = new UAStagingEntities();

    public ActionResult Index(int? id)
    {
        var depot = db.CSLA_DEPOT.Where(c => c.DEPOT_ID == id.Value);

        return View(depot.ToList());
     }

}

我不知道如何显示一个包含两个查询结果的视图。我将如何创建视图以显示仓库和地址?以及如何编写 return 语句?

public class HelloWorldController : Controller
{
    UAStagingEntities db = new UAStagingEntities();

    public ActionResult Index(int? id)
    {
         var depot = db.CSLA_DEPOT.Where(c => c.DEPOT_ID == id.Value);
         var Address = db.CSLA_ADDRESS.Where(a => a.CSLA_DEPOT.DEPOT_ID == id.Value);

         return View(depot.ToList());
    }
}

编辑 *

我添加了这个模型

    namespace CustomerCareMVC.Models
{
    public class CSLA_StagingModel

    {

        public List<CSLA_DEPOT> depots { get; set; }
        public List<CSLA_ADDRESS> addresses { get; set; }

    }

}

并在控制器中添加了这个方法

    public ActionResult ShowAllTables() 
    {


        var model = new CSLA_StagingModel()
        {

            depots = db.CSLA_DEPOT.Where(c => c.DEPOT_ID == 10065),
            addresses = db.CSLA_ADDRESS.Where(a => a.CSLA_DEPOT.DEPOT_ID == 10065),
        };


        return View(model);

    }

我在这两行下面得到了波浪线

            depots = db.CSLA_DEPOT.Where(c => c.DEPOT_ID == 10065),
            addresses = db.CSLA_ADDRESS.Where(a => a.CSLA_DEPOT.DEPOT_ID == 10065),

带有此错误消息

错误 1 ​​无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员表?) C:\CustCareMVC\CustomerCareMVC\CustomerCareMVC\Controllers\HelloWorldController.cs 59 26 CustomerCareMVC

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

    您需要创建一个具有以下参数的 ViewModel:

    public IQueryable<CSLA_DEPOT> depots {get; set;}
    public IQueryable<CSLA_ADDRESS> addresses {get; set;}
    

    然后您需要在控制器中创建这个新视图模型的实例,如下所示:

    var model = new ViewModelName(){
        depots = db.CSLA_DEPOT.Where(c => c.DEPOT_ID == id.Value),
        addresses = db.CSLA_ADDRESS.Where(a => a.CSLA_DEPOT.DEPOT_ID == id.Value),
    };
    

    然后您需要将此模型传递给您的视图,如下所示:

    return View(model);
    

    在您看来,您可以像这样访问两个不同的集合:

    Model.depots
    Model.addresses
    

    希望对你有帮助,如果有任何问题,请给我留言。

    【讨论】:

    • DevDave,我正在尝试实现此代码,但出现错误。将其添加到工作编辑下的问题中。谢谢
    • Joshua,我的代码中有一个错误。请注意,模型现在为每个变量引用 IQueryable 而不是列表。这应该可以解决您的问题。
    【解决方案2】:

    创建一个特殊对象,其中包含查询返回的两个类型的项目。然后,您可以在 View 中使用 Model.depot 和 Model.Address 访问它们。

    【讨论】:

    • 你不知道查询返回的类型吗?
    • 不,我没有。我正在查询表格并通过用户在网页上输入的 ID 号对其进行过滤。
    • 在您的模型文件夹中。您可以创建一个包含两个字段的类。每个列表一个。我认为您可以使用实体框架创建的类型。然后对于强类型视图,选择使用两个列表创建的类。
    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多