在控制器MVC3中获取空值

时间:2012-11-09 08:30:16

标签: asp.net-mvc-3

我是MVC3的新手,并且控制器只有一个动作。我在控制器类中定义了一些全局属性,并在action方法中为这些属性赋值。 例如:

  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,但值为null。

我试过TempData,但也没有持有价值。

4 个答案:

答案 0 :(得分:2)

  

但值为空。

我认为你会发现它们的值为0(零),这是积分字段的默认值。

映射到RosterController的每个请求都会导致创建RosterController新实例,这可以避免并发请求混淆其控制器状态的任何问题。

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

答案 1 :(得分:1)

为什么不让它们静止?

private static int var1;

或使用缓存或会话

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

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

答案 2 :(得分:1)

您可以将变量设为静态。使变量保持静态意味着 - 它的生命周期会延伸到程序的整个运行过程中。

像这样声明静态

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

但首先请告诉我们您的具体用例

答案 3 :(得分: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));
  }
  }
}