我是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));
}
}
}
在此代码中,第一次将值分配给var1
,var2
,var3
。第二次我需要那些vaues,但值为null。
我试过TempData,但也没有持有价值。
答案 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));
}
}
}