Joshua Slocum
Joshua Slocum

Reputation: 717

Display results of two queries in view using asp.net MVC2

I have this code that works.

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());
     }

}

What I don't know how to do is display a view with results from two queries. How would I create the view to show both depot and address? and how would I code the return statement?

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());
    }
}

EDIT *

I added this model

    namespace CustomerCareMVC.Models
{
    public class CSLA_StagingModel

    {

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

    }

}

And added this method in the controller

    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);

    }

I get squiggly line under these two lines

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

with this error message

Error 1 Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Collections.Generic.List'. An explicit conversion exists (are you missing a cast?) C:\CustCareMVC\CustomerCareMVC\CustomerCareMVC\Controllers\HelloWorldController.cs 59 26 CustomerCareMVC

Upvotes: 0

Views: 486

Answers (2)

DevDave
DevDave

Reputation: 1049

You would need to create a ViewModel that has the following paramters:

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

You would then need to create an instance of this new View Model in your controller like so:

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),
};

You would then need to pass this model to your view like so:

return View(model);

In your view you would access the two different collections like so:

Model.depots
Model.addresses

Hope this helps, leave me a comment if you have any questions.

Upvotes: 2

Catalin Florea
Catalin Florea

Reputation: 508

Create a special object that contains two items of the types returned by your queries. Then you can access them with Model.depot and Model.Address in your View.

Upvotes: 0

Related Questions