为什么我的 cookie 设置没有被应用?

2024-02-29

基于这里的答案:如何将 bool 值写入 cookie 或从 cookie 读取 bool 值? https://stackoverflow.com/questions/16765467/how-can-i-write-and-read-bool-values-into-from-cookies,我正在尝试实现cookie读取/写入代码。

我在页面上有一系列复选框,其选中状态应保存到/作为cookie;当页面[重新]加载时,最后的状态应该通知复选框是否应该被选中。但这不起作用。以下是该页面的相关部分:

@{
    bool twitterSelected = false;
    . . .
    var selectTwitterCookie = Request.Cookies["selectTwitter"];
    . . .
    if (selectTwitterCookie != null)
    {
        twitterSelected = Convert.ToBoolean(selectTwitterCookie);
    }
    . . .

if (IsPost)
{
    Response.Cookies["selectTwitter"].Value = twitterSelected.ToString();
    Response.Cookies["selectTwitter"].Expires = DateTime.Now.AddYears(1);
    . . .
}

}

<section class="featured">
        <div class="content-wrapper">
           <h1>Stuff!!!</h1>
            <form method="POST">
                <fieldset>
                    <legend>Opt In or Out</legend>
                    <input type="checkbox" id="selectTwitter" name="selectTwitter" checked=@twitterSelected>I'm Twitterpated!</input><br />
                    <input type="submit" id="btnSubmit" name="btnSubmit" value="Save Config changes"</input>
                </fieldset>
            </form>
        </div>
    </section>

然而,该复选框不仅没有恢复到我发布后保存的状态,在导航离开然后返回页面时,我得到,“System.InvalidCastException 未由用户代码处理 HResult=-2147467262 Message=无法将“System.Web.HttpCookie”类型的对象转换为“System.IConvertible”类型。 来源=mscorlib 堆栈跟踪: 在 System.Convert.ToBoolean(对象值) 在 c:\DuckbilledPlatypi\About.cshtml 中的 ASP._Page_About_cshtml.Execute() 处:第 27 行 。 。 。内部异常:"

这是 YSOD:

“/”应用程序中的服务器错误。 无法将“System.Web.HttpCookie”类型的对象强制转换为“System.IConvertible”类型。 描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。 异常详细信息:System.InvalidCastException:无法将类型“System.Web.HttpCookie”的对象强制转换为类型“System.IConvertible”。 来源错误: 第 25 行: //bool.TryParse(selectTwitterCookie, out twitterSelected); 第 26 行: // 或者,可以使用: 第 27 行:twitterSelected = Convert.ToBoolean(selectTwitterCookie); 第 28 行:} 第 29 行:if (selectBingCookie != null) 源文件:c:\DuckbilledPlatypi\About.cshtml 行:27 堆栈跟踪: [InvalidCastException:无法将“System.Web.HttpCookie”类型的对象转换为“System.IConvertible”类型。] System.Convert.ToBoolean(对象值) +18 c:\DuckbilledPlatypi\About.cshtml 中的 ASP._Page_About_cshtml.Execute():27 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197 System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1执行器)+69 System.Web.WebPages.WebPage.ExecutePageHierarchy() +151 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage)+76 System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext)+114 版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.18033

那么如何才能成功保存和恢复复选框的状态呢?

UPDATE

改变这个:

twitterSelected = Convert.ToBoolean(selectTwitterCookie);

...对此:

twitterSelected = Convert.ToBoolean(selectTwitterCookie.Value);

...摆脱了错误消息,但仍然没有恢复我保存的值(选中状态)。

UPDATE 2

奇怪的是,其中两个复选框现在正在工作(我选中的两个仍然处于选中状态)。到目前为止,为什么其他代码不这样做还是一个谜——它们的代码都是相同的,或者至少到目前为止看起来是相同的。我必须更深入地挖掘...

UPDATE 3

他们只appeared无法正常工作,因为用于设置它们的字符串与用于恢复它们的字符串不匹配。我现在已将布尔值的默认值从 false 更改为 true,并且所有复选框现在始终处于选中状态(在发布/重新加载页面后)。所以,我仍然不知道为什么以下不起作用:

bool twitterSelected = true;

var selectTwitterCookie = Request.Cookies["selectTwitter"];

if (selectTwitterCookie != null)
{
    twitterSelected = Convert.ToBoolean(selectTwitterCookie.Value);
}
. . .

if (IsPost)
{
    Response.Cookies["selectTwitter"].Value = twitterSelected.ToString();

                <input type="checkbox" id="selectTwitter" name="selectTwitter" checked=@twitterSelected>I'm Twitterpated!</input><br />

这些排列也不起作用:

<input type="checkbox" id="selectTwitter" name="selectTwitter" [email protected] /cdn-cgi/l/email-protection()>I'm Twitterpated!</input><br />
<input type="checkbox" id="selectTwitter" name="selectTwitter" checked="@twitterSelected">I'm Twitterpated!</input><br />

UPDATE 4

我什至尝试过这个:

<input type="checkbox" id="selectTwitter" name="selectTwitter" [email protected] /cdn-cgi/l/email-protection(twitterSelected)>I'm Twitterpated!</input><br />

...但它没有任何差异 - 复选框根本不会尊重 cookie 值。或者,更确切地说,vals 没有被设置:取消选中一个框后,所有 cookie 都是“True”,而未选中的应该是 false...

我所做的另一次尝试 - 因为我看到其中一个 cookie (secure_session) 的值为“true” - 是添加此代码以防情况很重要:

if (IsPost)
{
    Response.Cookies["selectTwitter"].Value = twitterSelected.ToString().ToLower();
. . .

……唉,穆德维尔再一次没有欢乐:强大的凯西已经出局了。

UPDATE 5

问题出在我的逻辑中:IsPost 部分/事件/条件没有将 cookie 值设置为当前现实(复选框的选中状态)。

我通过在“if (IsPost) {}”部分中强制 val 进行测试:

Response.Cookies["selectTwitter"].Value = "false";

...而且效果很好。但如何制作呢really工作仍然是一个难题。是否有一个 jQuery“httppost”事件,我可以根据复选框的状态设置所有 cookie?或者是否有一个 checkboxChange 或 -Toggle 事件,我可以在其中设置“this”复选框的 cookie 值?

UPDATE 6

我也尝试过这个:

if (IsPost)
{
    Response.Cookies["selectTwitter"].Value = Request["selectTwitter"]; //"false";
.  . .

        <form method="POST">
. . .
        <input type="checkbox" id="selectTwitter" name="selectTwitter" checked=@twitterSelected>I'm Twitterpated!</input><br />

...但还是不行;文本输入控件的名称/id 与 cookie 值的名称相同不是问题,不是吗?


我从 Mike“Mikesdotnetting”Brind 那里得到了答案http://forums.asp.net/p/1910373/5408967.aspx/1?Re+How+can+I+access+html+elements+in+the+IsPost+section+of+the+razor+code+ http://forums.asp.net/p/1910373/5408967.aspx/1?Re+How+can+I+access+html+elements+in+the+IsPost+section+of+the+razor+code+

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 cookie 设置没有被应用? 的相关文章

  • CSS 中的边框图像开头

    MDN 是这样定义的边框图像开始 https developer mozilla org en docs Web CSS border image outset border image outset 属性描述了边框的数量 图像区域超出边框
  • 理解

    我正在尝试在网站中使用所选的图像 假设我有一个简单的网站 用户可以使用以下命令从系统中选择图像
  • 需要正则表达式(使用 C#)将所有空白压缩为单个空白

    我需要将文档中的多个空格替换为单个空格 每次迭代 无论它们是空格 制表符还是换行符 任何类型的空格的任何组合都需要被截断为单个空格 假设我们有字符串 Hello t t n t n world 其中 t 和 n 分别代表制表符和换行符 那么
  • 更改中继器中链接按钮的文本

    我有一个中继器 可以显示与帖子相关的评论 我想添加一些功能 当用户单击它来自的链接时 举报此帖子 to 帖子已被标记 如何访问特定的lnkBut ton 显然 在 ItemDataBound 中 这很容易完成 但在 click 方法中 我不
  • 使用过渡+不透明度更改+溢出隐藏时出现问题

    如果您看到我共享的代码示例 您可以看到覆盖层超出了框的范围 我将问题追溯到transition属性 我想删除div之外的内容 溢出没有按预期工作 删除transition有效 但如果可能的话我想保留它 任何帮助表示赞赏 代码笔链接 http
  • 重写规则错误:HTTP 错误 500.50 - URL 重写模块错误。表达式“https://abc.com/{R:1}”无法展开

    每当有人通过 HTTP 协议发出请求时 我都会重写 url 以使其成为 HTTPS 这是 web config 中的代码
  • ASP.NET AJAX 4.0 客户端数据绑定

    我在 MSDN 杂志上读到了一些有关 ASP NET AJAX 4 0 新功能的文章 主要是客户端数据绑定 我觉得 MSDN 杂志有时包含很多 营销 所以我对真正开发人员的意见很感兴趣 值得吗 您打算使用它吗 Edit 如果有人感兴趣的话
  • 获取画布上下文的最后一个点的坐标

    我想创建一个arrowTo功能与CanvasRenderingContext2D prototype 为此 我需要获取最后一个点的坐标 例如 var ctx someCanvas getContext 2d ctx moveTo 10 40
  • onclick 函数上的 CSS 选择器

    有没有办法让CSS选择器onclick function 您可以在onclick https stackoverflow com questions 24365416 select element which have specific a
  • 有没有一种简单的方法来生成不重复的字符串?

    我知道我可以使用 GUID 生成唯一的字符串 但它太长了 现在我只需要在网站内生成不重复的字符串 我该怎么办 谢谢 例如 在网站上http mathurl com http mathurl com 可以生成一个永久的URL 比如http m
  • 如何将 div (或任何元素)覆盖在表格行 (tr) 上?

    我想在恰好有多个列的表行 tr 标记 上覆盖一个 div 或任何可以使用的元素 我尝试了几种方法 似乎都不起作用 我在下面发布了我当前的代码 我确实得到了一个覆盖 但不是直接覆盖在该行上 我尝试将覆盖顶部设置为 div Bottom css
  • 新BFC“清”浮箱

    如示例所示 应用display inline block 到包含块似乎 清除 了其中的浮动框 wrapper inline block display inline block left column background color te
  • ASP.NET 中获取当前域的最佳方法是什么?

    我想知道在 ASP NET 中获取当前域的最佳方法是什么 例如 http www domainname com subdir http www domainname com subdir 应该产生http www domainname co
  • 更改 CSS 网格中的列顺序

    我正在研究 CSS 网格 当我在桌面尺寸上查看它时 min width 769px 我有单行三列 像这样的事情 col 1 col 2 col 3 我可以使用 css grid 移动列 以便我可以在移动布局上执行类似以下操作吗 col 1
  • CSS:如何在模糊的背景上剪切文本?

    我想重新创建以下样式 我想出了以下内容 问题是剪切不会影响模糊滤镜 我不知道如何解决它 这是我的 HTML 代码 glass width 40 height 100 position absolute background rgba 255
  • 根据所选单选按钮启用文本框

    我有一个单选按钮列表 其中列出了不同的业务类别 最后一个选项是Other类别 当用户选择Other类别 我希望能够启用一个文本框 用户可以输入更多信息来解释Other选择 目前 我正在尝试 If rblCategory SelectedIn
  • 阻止通过 GET 传递“提交”按钮值?

    我正在尝试通过 GET 传递表单信息 这很重要 这样人们就可以将表单选择中过滤后的数据发送给其他人 问题是 使用下面的代码 它不仅传递过滤器信息 还传递提交表单值 如下所示 index php month filter Feb year f
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g

随机推荐