当我在MVC中回发时,如何在视图中维护值

时间:2014-07-16 12:15:29

标签: c# asp.net-mvc

我的页面中有一些控件,当页面首次加载数据从数据库获取并放在相应的控件中时。当我再次单击另一个按钮时,它将转到控制器并从数据库中获取值并绑定gridview。我的模型中有三个类,第一个类包含第二个和第三个类。当我在gridview中绑定第二个类时,那个时候第一个类变为null,所以所有值都变为null并且只绑定gridview。如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

再次,HTTP是无状态的,除非您将当前模型存储在会话等持久性介质中,否则它会在回发后丢失!

如果我理解你的问题吧!

当您第一次绑定类时,将它们放在Session var中然后将其返回到视图中, 然后当您第二次单击另一个按钮时,确保在actionmethod中检索会话var,然后将新值分配给此会话var中的类,而不是只返回新的值,认为旧的是还在那里。

答案 1 :(得分:0)

如果我理解你的要求,那么你可以将它存储在TempData中。 TempData将持续到下一个请求。

public class YourView
{
    public ActionResult Index()
    {
        string firstName = "Stephen";
        TempData["FirstName"] = firstName;
        return View();
    }

    public void ButtonClicked()
    {
        string firstName = (string)TempData["FirstName"];
    }
}

请注意,临时数据仅持续到下一个请求。因此,为了实现此目的,在加载视图后,下一个调用必须是ButtonClicked调用。

控制器是无状态的,所以如果你需要持续更长的时间,你必须在你需要使用该值之前调用控制器的每个位置使它变得有点hackish并且非常难看。TempData["FirstName"] = TempData["FirstName"]。就像我说的那样,我不建议(或者使用Session),但如果你需要,那么在我看来这是最安全的方式。