2012-11-09 53 views
2

我是MVC3的新成员,并且拥有一个控制器,只有一个动作。我在控制器类中定义了一些全局属性,并为这些属性在动作方法中分配了值。 例如:在控制器中获得空值MVC3

public class RosterController : Controller 
    { 
    int var1; 
    int var2; 
    int var3; 
    public ActionResult Index(int param1) 
    { 
     if(param1 ==1) 
     { 
     return view(newRosterViewModel(var1+1,var2+2,var3+3)); 
     } 
     else 
     { 
     var1=1; 
     var2=2; 
     var3=3; 
     return view(newRosterViewModel(var1,var2,var3)); 
     } 
     } 
    } 

在此代码首次var1var2var3分配值。第二次,我需要这些vaues,但值为空。

我试过用TempData,但也没有保留价值。

回答

1

为什么不让它们变成静态的?

private static int var1; 

,或者使用高速缓存或会话

HttpRuntime.Cache.Add("var1", value); 

var var1= HttpRuntime.Cache.Get("var1"); 
+0

thanx很多.... –

2

但值为空。

我想你会发现它们的值是0(零),这是整数字段的默认值。

映射到RosterController每个请求都将导致一个新实例被创建的RosterController,这避免了并发请求混合了他们的控制状态的任何问题。

要将信息从一个请求保存到另一个请求,有很多选项(数据库,会话,cookie,应用程序,...),但控制器实例的状态不是其中之一。持续请求的正确方法取决于需求。

1

你可以使你的变量为静态的。让你的变量成为静态的意思 - 它的寿命延长了整个程序的运行。

声明静态这样

private static int var1; 
private static int var2; 
private static int var3; 

但首先请告诉我们您的具体使用情况

0

当你渲染视图你应该通过这个变量再次控制器,因为在每次请求控制器重建:

public class RosterController : Controller 
{ 
int var1 = 0; 
int var2 = 0; 
int var3 = 0; 
public ActionResult Index(int param1, int var1, int var2, int var3) 
{ 
    if(param1 ==1) 
    { 
    return view(newRosterViewModel(var1+1,var2+2,var3+3)); 
    } 
    else 
    { 
    var1=1; 
    var2=2; 
    var3=3; 
    return view(newRosterViewModel(var1,var2,var3)); 
    } 
    } 
}