我正在尝试向用户身份添加项目,但是我认为这也可以通过其他方式完成。
我已经在“用户标识”中添加了一些自定义字段,但是我要尝试的是一旦用户成功登录,我就会检查是否将它们分配给多个分支(存储位置),然后为用户提供列表选择他们要显示其数据的分支。
我已经成功完成了此操作,但是现在我想将每个分支存储在用户会话/ cookie /标识中(不确定使用什么术语)。向用户显示许多复选框,一旦他们单击“保存”,我不确定该怎么做。
我需要将其保存在此函数中:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SelectBranch(params string[] branchNames)
{
foreach (var branch in branchNames)
{
//add branch to session/cookie/identity
}
return RedirectToAction("Index");
}
我需要采取什么步骤才能做到这一点?
这取决于您的最终目标是什么。分支的选择应该是持久的还是短暂的?根据您的评论,听起来您想将其保存在当前会话中,但是让用户下次再次选择时再选择一次。如果那是您的应用程序真正需要的,那很好,但是在我看来,这样的事情应该永久保存,以便用户可以在他们认为合适时更新这些选择,或者完全临时保存,即针对当前请求,例如通过一个或多个分支过滤一组结果。
仅存储当前的浏览器会话就产生了一个问题,即用户是否会意识到他们的选择在其他视图中仍然存在,相反,他们是否会理解为什么每次返回站点时都必须不断设置分支。
也就是说,您的选择:
ApplicationUser
和StoreBranch
(或任何其他)之间添加一个M2M 。Session
。从技术上讲,您可以使用声明,但实际上并不合适。在以下情况之一时应使用声明:1)所存储的数据不适用于每个用户,或者2)所存储的数据本质上是瞬态的,但应在会话中保留下来。声明的一个很好的示例用法是存储来自Facebook之类的auth令牌。并非每个用户都一定要有一个Facebook身份验证令牌,因此这不是您想要用作数据库列的内容,并且该身份验证令牌通常存在生命周期,因此它是临时的,但即使在会话期间也仍然需要保留该令牌被摧毁了。
根据您对要实现的目标的描述,这Session
是您的最佳选择,但我强烈认为,只要使用方法以后可以改变它,那么永久地保留此选择可能会有所价值。要将其保存到会话中,我实际上只是将您的字符串数组直接保存到会话中(不需要for循环):
Session["BranchNames"] = branchNames;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句