Asp.net mvc 4 如何跨多个控制器使用模型对象?

Asp.net mvc 4 如何跨多个控制器使用模型对象?,asp.net-mvc-4,Asp.net Mvc 4,场景:在用户成功登录后,我想创建一个Account对象(Account类是我的模型的一部分),并在其中获取和存储用户的信息。我希望我的所有控制器(HomeController、AccountController等)都可以访问此Account对象,并且我希望能够从任何控制器内部编辑其内容。(1) 我如何实现这个场景?(2) 如何将模型对象从一个控制器传递到另一个控制器 (1) 我如何实现这个场景 需要访问时,可以从数据存储中检索帐户模型 (2) 如何将模型对象从一个控制器传递到另一个控制器 见(1

场景:在用户成功登录后,我想创建一个Account对象(Account类是我的模型的一部分),并在其中获取和存储用户的信息。我希望我的所有控制器(HomeController、AccountController等)都可以访问此Account对象,并且我希望能够从任何控制器内部编辑其内容。(1) 我如何实现这个场景?(2) 如何将模型对象从一个控制器传递到另一个控制器

(1) 我如何实现这个场景

需要访问时,可以从数据存储中检索帐户模型

(2) 如何将模型对象从一个控制器传递到另一个控制器

见(1)。因为您是从数据存储中检索它,所以不需要到处传递它


我打算保留它,直到用户注销

然后您可以使用会话。但我建议不要保存太多信息。例如,您有以下模型或实体:

public class AccountModel {
    public int Id {get;set;}
    public string Username {get;set;}
    // and a whole lot more of properties
}
我建议您只存储一个
标识符
字段,可以是
Id
Username
。然后,当收到另一个请求时,您需要验证该请求或更新该模型,您可以:

  • 再次获取该用户的数据和所有相关信息
  • 更新必要的字段
  • 将其保存到数据库中
所以你可以这样做:

// to save it in a session after logging in
Session["current_user_id"] = id_variable;
// to retrieve it from session after another request comes in
var id = (int)Session["current_user_id"];
// fetch from your database
// do the necessary update
// persist the changes

您是否打算保留它,然后在其他请求中使用它?或者只是在(单个)请求期间使用它并传递它?我打算保留它,直到用户注销。用户登录后,我想创建一个帐户对象,从数据库中获取他的详细信息,并用它填充帐户对象。然后,在另一个控制器(其视图为用户提供了编辑其帐户信息的能力)中,我想保存对我之前和之后创建的同一帐户对象的编辑,保存对数据库的更改。非常感谢。我会按照你的建议去做-使用session来保存用户的AccountID,然后在我愿意的时候使用它从数据库中获取他的详细信息。不客气。请记住会话将过期,因此请确保检查会话项是否为null。