我有一个ASP.NET WebForms应用程序,可与Sessions广泛协作。实际上,我有一个名为“问卷”的模型
public class myQuestionnaire
{
public int ID { get; set; }
public string Name { get; set; }
public string Status { get; set; } = "A";
public List<Question> Questions { get; set; } = new List<sQuestion>();
}
问卷包含问题列表
public class Question
{
public int ID { get; set; }
public string Name { get; set; } = "";
public string Remarks { get; set; } = "";
public List<QuestionAnswer> Answers { get; set; } = new List<QuestionAnswer>();
}
public class QuestionAnswer
{
public int ID { get; set; }
public string Name { get; set; }
public string Text { get; set; }
public int Weight { get; set; }
}
我有一个维护表格,其中我从数据库中加载问卷,将其保留在会话变量中,对于每次更改,我都需要对问卷进行调查,然后从Session加载而不是每次从DB加载。 / p>
例如,要更改调查表名称,我有以下web方法,当表单上的调查表名称更改时,该方法是通过javascript触发的
[WebMethod(EnableSession = true)]
public void ChangeName(string new_name)
{
myQuestionnaire _q = () Session["MyQuestionnaireSessionName"];
_q.Name = HttpUtility.UrlDecode(name);
}
现在,我们决定在.NET Core中迁移解决方案,但是上述方法面临一些问题。实际上,如果不将对象序列化为字符串,就无法将其保留在会话中。如果这样做,那么我们将无法直接访问该对象,因此我们需要对其进行手动序列化,并在对该对象执行的每次更改中将其反序列化。
第二个问题是是否存在另一种方法来实现上述情况,而无需将每个临时更改的整个对象都保留在数据库中。 我们正在考虑cookie,缓存和viewstate,但我对MVC和CORE不够熟悉,我也不了解它们的优缺点。