2

我是 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));
      }
      }
   } 

在此代码中,第一次将值分配给var1, var2, var3。第二次我需要这些值,但值为空。

我尝试使用 TempData,但也没有保持价值。

4

4 回答 4

2

但值为空。

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

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

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

于 2012-11-09T08:43:02.240 回答
1

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

像这样声明静态

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

但首先请告诉我们您的确切用例

于 2012-11-09T08:47:09.993 回答
1

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

private static int var1;

或使用缓存或会话

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

var var1= HttpRuntime.Cache.Get("var1");
于 2012-11-09T08:42:40.853 回答
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));
  }
  }
}
于 2012-11-09T12:23:52.293 回答