Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是在WebMatrix中设置和维护会话变量的最佳方法吗?_C#_Asp.net_Session State_Webmatrix_Asp.net Webpages - Fatal编程技术网

C# 这是在WebMatrix中设置和维护会话变量的最佳方法吗?

C# 这是在WebMatrix中设置和维护会话变量的最佳方法吗?,c#,asp.net,session-state,webmatrix,asp.net-webpages,C#,Asp.net,Session State,Webmatrix,Asp.net Webpages,在过去,我总是在使用WebMatrix维护会话状态时遇到很多问题,并在期望它们超时时处理它们(主要是因为我还在学习) 必须始终记住用户输入,因为如果他们提交并且出现自定义错误,我不希望他们必须将所有信息重新输入表单 我想我终于找到了一种方法,可以在将来需要时正确维护和管理超时会话变量 我意识到还有其他几种在网页之间传输数据的方法,相信我,如果适用,它们肯定会首先被使用。这个问题只适用于我觉得会话变量是我的最佳选择的情况 我的问题是,我总是认为我已经弄明白了,然后,只有在我设置了超过一半的编码之后

在过去,我总是在使用WebMatrix维护会话状态时遇到很多问题,并在期望它们超时时处理它们(主要是因为我还在学习)

必须始终记住用户输入,因为如果他们提交并且出现自定义错误,我不希望他们必须将所有信息重新输入表单

我想我终于找到了一种方法,可以在将来需要时正确维护和管理超时会话变量

我意识到还有其他几种在网页之间传输数据的方法,相信我,如果适用,它们肯定会首先被使用。这个问题只适用于我觉得会话变量是我的最佳选择的情况

我的问题是,我总是认为我已经弄明白了,然后,只有在我设置了超过一半的编码之后,我才意识到为什么它不太有效,然后找到一些草率(但有效)的解决方法,至少对那个项目有效

我将在使用公共数据库和web界面组合时使用会话变量的项目。通常有3个主页面:添加条目页面、编辑条目页面和查找条目页面。添加条目页面和查找条目页面最终发布并重定向到编辑条目页面

在我开始我的下一个项目之前,我认为询问我的方法是否至少瞄准了正确的方向,或者我是否仍然没有完全正确地接近这个方向是明智的

以下是我认为可能有效的方法(尽管这似乎有点太简单):

  • 每页使用局部变量
  • 在(IsPost)分支中,在发布/重定向之前,根据局部变量分配会话变量
  • 在另一个页面上,在重定向之后,使用会话变量分配新的静态局部变量
  • 换句话说:我将(在必要时)仅使用会话变量来传输在完全可接受的时间内发生的数据(不允许会话状态有足够的时间超时),然后在需要时每页仅引用局部变量

    我疯了吗?或者,当被迫在WebMatrix中处理会话状态时,这是处理这个问题的最佳方式(或者至少是一种体面可行的方式)


    抱歉,如果这是一个愚蠢的问题xD

    在我看来,您不应该使用会话变量来记住用户在表单中输入的内容。表单-添加或编辑-应发布到自身进行验证。这样,这些值就可以在Request.Form集合中使用。在发生验证错误时,您可以轻松地重新填充表单。成功提交后,插入或更新数据库,然后重定向到另一个页面以防止重复提交


    如果使用得当,会话变量非常容易使用。我怀疑您遇到的困难是因为您在错误的场景中使用了它们。

    我从来都不知道新创建的记录的ID比用户刚刚输入的实际数据更敏感。但是,如果您不能依赖会话数据来持久化多个请求,您可以考虑加密数据并将其放入查询字符串中。Google是您的朋友:在您执行yor db.Execute以创建新记录之后,您应该调用
    var newId=db.GetLastInsertId()
    获取该记录的ID:是-您使用现有的数据库变量,它将检索此连接上最近创建的行的标识值,其中主键是标识类型。这是一个任何人都希望得到的简洁答案(真正的答案)。法官大人,我没有其他问题了……)再次感谢你,真的!