2016-12-14 21 views
0

我想做一个web应用程序,我有一个冲突,因为我有一个模型,我在控制器中调用,但每次我改变视图之间使用相同的控制器的实例我的模型重置并重新获得初始值。如何从2个不同的视图调用变量

DataTable dt; 

public AdminUsers() 
{ 
    dt = (new Userdb()).GetUsers(); 
} 

public ActionResult Admin() 
{ 
    ... // do whatever with dt before showing the results 
    return View(this.dt); 
} 

public ActionResult Results() // dt resets with the initial values 
{ 
    return View(this.dt); 
} 

如何在修改后保留视图之间的值?

+1

您需要在您的POST方法某处坚持它(通常是数据库,但'Session'可能是一种选择) –

回答

3

为了这个目的,你可以使用Session

一样,当你初始化它(在你的AdminUsers()例如方法)

Session["dt"] = (new Userdb()).GetUsers(); 

,然后检索你的价值,但总是检查是会话不为空:

If(Session["dt"] != null) 
{ 
    DataTable myTable = (DataTable) Session["dt"]; 
    //Do whatever you need with your dt..... 
} 
-1

你可以把它变成的ViewData:

dt = (new Userdb()).GetUsers(); 
ViewData["Datable"] = dt; 
+1

然后呢? ViewData只适用于一个请求。 – CodeCaster

0

您可以使用一个Session的......会议将允许你存储数据对于当前会话,然后ü将能够访问该会话内的任何视图的数据...

Session["data"] = dt; 

然后在您的视图访问该届会议上,将其转换成数据表,并用它..

(DataTable)Session["data"]; 
0

你不应该让dt变量的实例变量,而是在每一个动作加载和更新后的记录,这样你将永远得到最新的新数据。 建议不要使用会话,因为它会限制应用程序的可伸缩性。

此外,你应该使用POCO来传输数据,而不是一个DataTable