Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 传递值并暂时保存值。。。是否使用会话、隐藏字段、查询字符串或其他?_C#_Asp.net_Session_Query String_Hidden Field - Fatal编程技术网

C# 传递值并暂时保存值。。。是否使用会话、隐藏字段、查询字符串或其他?

C# 传递值并暂时保存值。。。是否使用会话、隐藏字段、查询字符串或其他?,c#,asp.net,session,query-string,hidden-field,C#,Asp.net,Session,Query String,Hidden Field,这可能是一个基本问题。。。然而,我只是选择了一个解决方案,却没有给予太多的思考 考虑一个具有表格网格的页面:/FormList.aspx 其中,选择编辑表单会将用户重定向到如下页面:/FormEdit.aspx?Id=2 我通常可以在查询字符串中传递值,因为我在FormEdit的代码中检查Id是否有效。传递值的最佳方式是:会话还是查询字符串?还是别的 当用户编辑表单时。。。我通常在会话中临时保存Id(以避免再次从url获取它)。在用户的表单编辑过程中,存储值的最佳方式是什么?在会话中还是在隐藏字

这可能是一个基本问题。。。然而,我只是选择了一个解决方案,却没有给予太多的思考

考虑一个具有表格网格的页面:
/FormList.aspx

其中,选择编辑表单会将用户重定向到如下页面:
/FormEdit.aspx?Id=2

我通常可以在查询字符串中传递值,因为我在FormEdit的代码中检查Id是否有效。传递值的最佳方式是:会话还是查询字符串?还是别的

当用户编辑表单时。。。我通常在会话中临时保存Id(以避免再次从url获取它)。在用户的表单编辑过程中,存储值的最佳方式是什么?在会话中还是在隐藏字段中?还是别的?(当我想存储一个临时数据表时,我相信我只能使用会话,但当它是一个整数值时…)


提前感谢您的建议:)

通常,如果您的页面之间要传输的数据非常小,则QueryString是一个不错的选择

2-当您想要存储特定于用户的数据时,会话将是一个很好的选择


在您的情况下,最好是查询字符串,因为您要将非常小的数据(ID)发送到下一页。

通常,如果要在页面之间传输非常小的数据,则查询字符串是一个不错的选择

2-当您想要存储特定于用户的数据时,会话将是一个很好的选择


在您的情况下,最好是查询字符串,因为您正在将非常小的数据(ID)发送到下一页。

需要考虑以下几点:

  • 如果对值的操作存在安全风险,则需要将其保存在服务器端,或者保护客户端的值(这不容易纠正)。或者更好的办法是:重新催眠他们
  • 如果用户同时在多个选项卡中打开网站,则在会话中保存很容易产生问题。它还可以断开后退按钮。
    例如,如果您保护了用户当前正在会话中编辑的项目的ID,并且用户同时编辑了两个条目,则他首先开始编辑的条目的内容可能会写入他后来开始编辑的条目中

  • 需要考虑的几件事:

  • 如果对值的操作存在安全风险,则需要将其保存在服务器端,或者保护客户端的值(这不容易纠正)。或者更好的办法是:重新催眠他们
  • 如果用户同时在多个选项卡中打开网站,则在会话中保存很容易产生问题。它还可以断开后退按钮。
    例如,如果您保护了用户当前正在会话中编辑的项目的ID,并且用户同时编辑了两个条目,则他首先开始编辑的条目的内容可能会写入他后来开始编辑的条目中

  • 我建议不要将
    会话
    用于可以在查询字符串或隐藏表单字段中轻松快速地存储和检查的内容;您在这里讨论的信息非常适合查询字符串

    请注意,
    会话
    可能会在有人试图在不同选项卡中同时编辑多个表单时引入错误。当他们保存一个时,所取的
    会话
    值将来自上次加载以保存的会话。。。很可能不是你想要的,而且很难弄清楚这一点


    您应该做的是将formID保存在查询字符串/表单字段中,并在提交保存时再次检查它是否正常;例如,确保它是一个存在的ID,并且允许编辑。

    我建议不要使用
    会话
    来处理一些可以轻松快速地存储和检查到查询字符串或隐藏表单字段中的内容;您在这里讨论的信息非常适合查询字符串

    请注意,
    会话
    可能会在有人试图在不同选项卡中同时编辑多个表单时引入错误。当他们保存一个时,所取的
    会话
    值将来自上次加载以保存的会话。。。很可能不是你想要的,而且很难弄清楚这一点


    您应该做的是将formID保存在查询字符串/表单字段中,并在提交保存时再次检查它是否正常;例如,确保该ID存在并且允许编辑。

    我的建议是将该值保留在会话变量中,但当您第一次运行FormEdit.aspx的页面加载时,请将该值保存在页面的ViewState中,然后清除会话变量

    类似的内容(在FormEdit.aspx的页面中):


    我的建议是将该值保留在会话变量中,但是当您第一次运行FormEdit.aspx的页面加载时,请将该值保存在页面的ViewState中,并清除会话变量

    类似的内容(在FormEdit.aspx的页面中):


    ASP.NET和查询字符串的问题在于,它们在回发时仍然存在。也就是说,任何页面的表单操作默认为url,包括用于加载它的查询字符串

    如果所讨论的ID只是用来选择一个特定的表单(并且与用户数据无关),这不是什么大问题,事实上,这可能是您想要的

    另一方面,如果它标识了一个记录,您可能不需要它。假设您正确地编写代码,这不应该存在安全风险,但它可以通过在查询字符串中公开记录的内部ID给用户一种存在安全风险的印象。这看起来也很不幸

    有很多方法可以解决这个问题,我认为在3.5中你可以通过编程改变动作的形式。(过去,您必须使用javascript来实现这一点——即使表单操作已公开,也无法更改)

    解决这个问题的最好办法是避免出现问题
    if (!IsPostBack)
    {
        ViewState["MyVar"] = Session["MyVar"];
        Session.Remove("MyVar");
    }