草庐IT

asp.net - 为什么我的 cookie 设置没有被应用?

coder 2023-08-07 原文

基于这里的答案: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=Unable to cast object类型为“System.Web.HttpCookie”的类型为“System.IConvertible”。
源=mscorlib
堆栈跟踪:
在 System.Convert.ToBoolean(对象值)
在 ASP._Page_About_cshtml.Execute() 在 c:\DuckbilledPlatypi\About.cshtml:line 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
ASP._Page_About_cshtml.Execute() 在 c:\DuckbilledPlatypi\About.cshtml:27
System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +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

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

更新

改变这个:
twitterSelected = Convert.ToBoolean(selectTwitterCookie);

...到这个:
twitterSelected = Convert.ToBoolean(selectTwitterCookie.Value);

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

更新 2

奇怪的是,两个复选框现在正在工作(我选中的两个保持选中状态)。到目前为止,为什么其他的不是一个谜 - 它们的代码都是相同的,或者至少到目前为止看起来是这样。我将不得不深入挖掘......

更新 3

它们似乎只是在工作,因为用于设置它们的字符串和用于恢复它们的字符串不匹配。我现在已将 bool 的默认值从 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" checked=@twitterSelected.ToString()>I'm Twitterpated!</input><br />
<input type="checkbox" id="selectTwitter" name="selectTwitter" checked="@twitterSelected">I'm Twitterpated!</input><br />

更新 4

我什至试过这个:
<input type="checkbox" id="selectTwitter" name="selectTwitter" checked=@Convert.ToBoolean(twitterSelected)>I'm Twitterpated!</input><br />

...但它没有区别 - 复选框根本不会尊重 cookie vals。或者,更确切地说,没有设置 vals:取消选中一个框后,所有 cookie 都是“真”,而未选中的应该是假的......

我所做的另一次尝试——因为我看到其中一个 cookie (secure_session) 的值为“true”——正在添加此代码,以防万一很重要:
if (IsPost)
{
    Response.Cookies["selectTwitter"].Value = twitterSelected.ToString().ToLower();
. . .

...再一次,唉,Mudville 没有欢乐:强大的 case-y 已经出局了。

更新 5

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

我通过在“if (IsPost) {}”部分中像这样强制使用 val 进行了测试:
Response.Cookies["selectTwitter"].Value = "false";

...它工作正常。但如何让它真正发挥作用仍然是一个难题。是否有一个 jQuery“httppost”事件,我可以根据复选框的状态设置所有 cookie?或者是否有一个 checkboxChange 或 -Toggle 事件,我可以在其中为“this”复选框设置 cookie val?

更新 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值的名称相同不是问题,是吗?

最佳答案

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

关于asp.net - 为什么我的 cookie 设置没有被应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775435/

有关asp.net - 为什么我的 cookie 设置没有被应用?的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  3. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  4. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  5. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  6. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  7. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  8. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  9. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  10. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

随机推荐