.net 在控制器MVC3中获取空值

qf9go6mv  于 2023-04-22  发布在  .NET
关注(0)|答案(4)|浏览(106)

我是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。第二次我需要这些值,但值为空。
我尝试了TempData,但它也没有价值。

6yoyoihd

6yoyoihd1#

但值为空。
我想你会发现它们的值是0(零),这是整数字段的默认值。
每个Map到RosterController的请求都会导致RosterController的一个 * 新示例 * 被创建,这避免了并发请求混淆其控制器状态的任何问题。
要将信息从一个请求持久化到另一个请求,有许多选项(数据库,会话,cookie,应用程序......),但控制器示例的状态不是其中之一。跨请求持久化的正确方法取决于需求。

8hhllhi2

8hhllhi22#

为什么不让它们静止呢?

private static int var1;

或使用缓存或会话

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

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

pieyvz9o3#

你可以让你的变量是静态的。让你的变量是静态的意味着它们的生存期会延伸到整个程序的运行。
像这样声明static

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

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

slwdgvem

slwdgvem4#

当你渲染视图时,你应该再次将这些变量传递给控制器,因为在每次请求时都会重新创建控制器:

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

相关问题