2010-06-04 5 views
2

J'ai commencé à travailler avec asp.net mvc très récemment et j'ai rencontré un problème. J'ai une page aspx qui rend quelques pages ascx. Ce que je voudrais faire est de déclarer une var globale à la page aspx afin qu'elle soit visible par tous ses enfants. J'ai essayé <% var i = 0; %> mais il n'était pas visible sur les pages enfant.Comment déclarer une variable globale dans la page ASP.NET MVC

Que pouvais-je faire?

Répondre

4

variables à partir d'une page ASPX ne sont pas partagées avec les vues partielles. La vue est juste une représentation d'une donnée. Vous devez transmettre les données en tant que modèle à chaque vue que vous souhaitez afficher, qu'il s'agisse d'une vue simple ou d'une vue partielle.

<% Html.RenderPartial("ViewName", Model, ViewDataDictionnary) %> 

Si vous voulez passer une variable à une vue partielle, je vous recommandons fortement d'ajouter ce paramètre au modèle de la vue partielle, plutôt que de le transmettre en plus via le ViewDataDictionnary.

+0

Est-ce que cela s'applique à deux vues héritant d'une vue partagée? Si je devais déclarer et utiliser une variable dans la vue partagée, serais-je capable de la remplacer dans les vues héritées pour changer la sortie? – yoozer8

+0

Je ne suis pas sûr de comprendre le cas lié à cette question, mais la vue est juste une classe qui rend html. Mais la variable ne sera toujours pas partagée entre différents appels à RenderPartial, car cela créerait une instance différente de la vue partielle. –

0

Vous pouvez l'ajouter à la ViewData et ensuite passer le ViewData au ascx avec

<% Html.RenderPartial("ViewName", Model, ViewData) %> 

voir msdn on RenderPartial

Donc, dans votre page ASPX que vous feriez quelque chose comme

<% ViewData["i"] = 0; %> 

Et dans votre userControl vous le reprenez juste et l'employez comme vous voulez

<% int i = (int)ViewData["i"] %> 

Une autre façon serait d'utiliser RenderAction et de le passer en paramètre ... nous aurions donc besoin de savoir comment afficher votre ascx.

voir msdn on RenderAction

Questions connexes