2009-01-20 10 views
1

J'ai une liste de villes et une liste de pays et les deux que je veux avoir sur le fichier de vue (aspx). J'essaie quelque chose comme ça, mais il ne fonctionne pas:Comment affecter plusieurs modèles à une même vue?

World.Controllers espace de noms { public class WorldController: Controller { Index du public ActionResult() {

 List<Country> countryList = new List<Country>(); 
     List<City> cityList = new List<City>(); 

     this.ViewData["CountryList"] = countryList; 
     this.ViewData["CityList"] = cityList; 

     this.ViewData["Title"] = "World Contest!"; 
     return this.View(); 
    } 
} 

}

<table> 
<% foreach (Country country in this.ViewData.Model as IEnumerable) { %> 
    <tr> 
     <td><%= country.Code %></td> 
    </tr> 
<% } %> 
</table> 

Répondre

4

Vous devez obtenir les données de vue que vous avez définies par nom. C'EST À DIRE.

<table> 
<% foreach (Country country in (List<Country>)this.ViewData["CountryList"]) { %> 
     <tr> 
       <td><%= country.Code %></td> 
     </tr> 
<% } %> 
</table> 

Mais ce n'est pas idéal, car il n'est pas fortement typé. Ce que je suggère est de créer un modèle spécifique à votre vue.

public class WorldModel 
{ 
    public List<Country> Countries { get; set; } 
    public List<City> Cities { get; set; } 
} 

Ensuite, créez votre vue fortement typée en tant que vue WorldModel. Ensuite, dans votre action:

List<Country> countryList = new List<Country>(); 
List<City> cityList = new List<City>(); 
WorldModel modelObj = new WorldModel(); 
modelObj.Cities = cityList; 
modelObj.Countries = countryList; 

this.ViewData["Title"] = "World Contest!"; 
return this.View(modelObj); 

Assurez-vous que votre opinion est fortement typée:

public partial class Index : ViewPage<WorldModel> 

Et vous serez en mesure de le faire de cette façon:

<table> 
<% foreach (Country country in ViewData.Model.Countries) { %> 
     <tr> 
       <td><%= country.Code %></td> 
     </tr> 
<% } %> 
</table> 
Questions connexes