Danny Gilbert
Danny Gilbert

Reputation: 1

Using (showing) data from another model from my current view

No code to show. I just want to understand something. I already do some MVC code (I have a model, I ask Visual Studio to create Controller and View). Each view has only "ONE MODEL" associated. So, with Razor, I can show data from this model. I play with my code and I understand it up to now.

BUT ... On the same view, HOW we can work with another MODEL ?

For me, a model is simply a class with properties, etc. My database has an equivalent "data table" for each model. I can manipulate it with Entity Framework ... no problem. But, I need to use DATA from different model (different table) in the SAME VIEW and Visual Studio does not give me permission to use another MODEL in the view.

What is the strategy ? (or maybe I don't understand something ...)

Thank you.

Upvotes: 0

Views: 3151

Answers (3)

AdrienTorris
AdrienTorris

Reputation: 9391

The strategy is to build a view model, a model built to be displayed, and represents the data that you need to use.

Example :

You have these classes, classes who are a representation of your database :

public class FootballTeam{
     public string Name{get;set;}
     public string Logo{get;set;}
}

public class FootballGame{
     public Datetime Date {get;set;}
     public string Competition {get;set;}
}

public class Referee{
     public string Name{get;set;}
     public int Experience {get;set;}
}

To display information about a match game, you can create a view model for this, class who can references some classes of your business model if necessary :

public class GameViewModel{
     [DisplayName("Home team")]
     public FootballTeam HomeTeam{get;set;}

     [DisplayName("Referee")]
     public Referee Referee{get;set;}

     [DisplayName("Visitor team")]
     public FootballTeam VisitorTeam {get;set;}

     [DisplayName("Comments")]
     public List<string> RedactionComments{get;set;}
}

And create a view who will consume this GameViewModel. In general, when you create a new MVC project, your have a folder named "ViewModels" in your presentation layer who contains some classes like this one.

This method allows to separate your business model to your presentation model, which are 2 completely different things.

There are very good answers here : What is ViewModel in MVC?

Upvotes: 6

Heemanshu Bhalla
Heemanshu Bhalla

Reputation: 3763

You should use ViewModal to Create a ViewModal that will be combination of two modals properties as per our need

ViewModel contains the fields which are represented in the strongly-typed view. It is used to pass data from controller to strongly-typed view with Own Defined Modals

Understand how to use View Modal in MVC From Link Below -

See In Image How View Modal Works

Understand View Modal In MVC

CODE THAT DEMONSTRATE HOW TO USE VIEWMODALS IN MVC

Product.cs

 public class Product
    {
        public Product() { Id = Guid.NewGuid(); }
        public Guid Id { get; set; }
        public string ProductName { get; set; }

        public virtual ProductCategory ProductCategory { get; set; }

    }

ProductCategory.cs

public class ProductCategory
{
    public int Id { get; set; }
    public string CategoryName { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

ProductViewModel.cs

  public class ProductViewModel
    {
        public Guid Id { get; set; }

        [Required(ErrorMessage = "required")]
        public string ProductName { get; set; }

        public int SelectedValue { get; set; }

        public virtual ProductCategory ProductCategory { get; set; }

        [DisplayName("Product Category")]
        public virtual ICollection<ProductCategory> ProductCategories { get; set; }
   }

Upvotes: 0

Shyju
Shyju

Reputation: 218732

You can update your model type of your razor view to any type you want. It will work as long as you are passing that type from your action method.

Simply open up the razor view and change the line where it says what type the model is.

@model Customer

Now you need to make sure that you are passing a Customer object from your action

public ActionResult Create()
{
   return View( new Customer());
}

Also when you create a view, You do not need to necessarily select the Model type in the Dialog box. You can keep that empty and add it to the razor view as needed ( as shown above)

If you want to bring data from 2 different table, Create a new view model which has properties needed for the view and use that as your view's model type.

Upvotes: 0

Related Questions