How to pass multiple model in view in ASP.NET MVC?

13,902

Solution 1

To Expand on my comment, I would suggest creating a ViewModel folder for organization sake. in this add the view model

public class SearchScrapClassViewModel
{
    SearchScrapClass searchScrap;
    WClass wClass;
    SClass sClass;
    YClass yClass;
}

In your controller then you instantiate the new viewmodel

SearchScrapClassViewModel model = new SearchScrapClassViewModel
{
    ....add in your logic to fill your class objects here


}

return view(model);

then in your view add the using for the viewmodel.

@using SearchScrapClassViewModel

Solution 2

You can pass multiple model by creating a new model class which will contain multiple objects.

public class MultiModel 
    {
     SearchScrapClass searchScrap;
     WClass wClass;
     SClass sClass;
     YClass yClass;
    }

Solution 3

See the tuple tutorial http://www.dotnetperls.com/tuple or this one http://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx

Like controller:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var first = new FirstModel();
        var second = new SecondModel();
        return View(Tuple.Create(first,second));
    }
}

And the view:

@model Tuple

<div> 
    @Model.Item1.FirstModelProp
    @Model.Item2.SecondModelProp
</div>
Share:
13,902
Man8Blue
Author by

Man8Blue

Updated on June 18, 2022

Comments

  • Man8Blue
    Man8Blue almost 2 years

    Problem is: I want to run 3 different actions but instead of that i want to fed all data from single action in a bigger model.

    I am using:

    public class SearchScrapClass
        {
            public WClass WClass { get; set; }
            public SClass SClass { get; set; }
            public YClass YClass { get; set; }
        }
    
        public class WClass 
        {
            public string title { get; set; }
            public string link { get; set; }
        }
        public class SClass 
        {
            public string title { get; set; }
            public string link { get; set; }
        }
        public class YClass 
        {
            public string title { get; set; }
            public string link { get; set; }
        }
    

    I am using LINQ to add data in these models.

    I am using :

          var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='span']")
            from link in info.SelectNodes("div//a").Where(x => x.Attributes.Contains("href"))
             select new SearchScrapClass //Main Bigger Class
             {
                WClass.link= link.Attributes["href"].Value, //ERROR: How to add to WClass's url ?
                WClass.title= link.InnerText //ERROR: How to add to WClass's url ?
             }
    
    
    var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='results']")
                   from link in info.SelectNodes("p//a").Where(x => x.Attributes.Contains("href"))
                   select new SearchScrapClass //Main Bigger Class
                     {
                       YClass.link= link.Attributes["href"].Value, //ERROR: How to add to YClass's url ?
                       YClass.title= link.InnerText //ERROR: How to add to YClass's url ?
                     }
    
    //Also for the 3rd class (model)
    
    
        return View(wikians); //and then return bigger class model so that i can access them in view
    

    This is one way i want to add data to link and title of all the classes.

    My try is to add data to all 3 classes from different sources and pass the bigger model to view so that i can access all the classes as:

    @model SearchScrapClass
    @using(Html.BeginForm()) {
        @Html.EditorFor(o => o.WClass.link)
        ...
    }
    

    Please suggest a way

    Thanks