2010-06-04 944 views
2

我最近开始使用asp.net mvc,并且遇到了一个问题。 我有一个呈现一些ascx页面的aspx页面。我想要做的是在aspx页面声明一个全局变量,以便它的所有孩子都可以看到它。我试过<% var i = 0; %>,但它在子页面上不可见。如何在ASP.NET MVC中声明一个全局变量页面

我该怎么办?

回答

4

变量不与局部视图共享。 视图只是一段数据的表示。您必须将数据作为模型传递给要渲染的每个视图,无论它是普通视图还是部分视图。

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

如果你想给一个变量传递给局部视图,我会强烈建议您将此参数添加到局部视图的模型,而这要通过ViewDataDictionnary另外通过。

+0

这是否适用于从共享视图继承的两个视图?如果我要在共享视图中声明和使用变量,我是否可以在继承视图中重写它以更改输出? – yoozer8 2011-08-11 11:28:02

+0

我不确定要理解与此问题有关的情况,但该视图只是一个呈现html的类。但是这个变量仍然不会在对RenderPartial的不同调用中共享,因为这会创建不同的局部视图实例。 – 2011-08-11 13:14:35

0

你可以把它添加到的ViewData然后传递的ViewData到ASCX与

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

看到msdn on RenderPartial

因此,在你的aspx页面你会做这样的事情

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

而在你的用户控件中,你只需要回顾一下并按照你的需要使用它

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

另一种方法是使用RenderAction eand将它作为参数传递......所以我们需要知道如何显示您的ascx。

看到从aspx页msdn on RenderAction