gpt4 book ai didi

c# - 使用 jQuery 选项卡时无效的 ViewState

转载 作者:行者123 更新时间:2023-11-30 13:02:16 24 4
gpt4 key购买 nike

我有一个相当简单的页面,其中包含一组 jQuery 选项卡,其中一些内容是通过 ajax 调用的。我的页眉中的母版页中也有一个搜索框。

当我打开标签页时,搜索框工作正常。但是,一旦我单击其中一个 ajax 选项卡,搜索框就无法使用“无效 View 状态”蓝屏死机。

我相信这是因为 ajax 页面正在用它自己的替换 __VIEWSTATE 隐藏输入。

我怎样才能阻止这种行为?

更新:我注意到 YSOD 只出现在 IE 和 Chrome 中,Firefox 似乎没有同样的问题。虽然浏览器如何影响 ViewState,但我不确定。

更新:我已将显示此问题的网站的精简版放在这里:http://dropbox.com/s/7wqgjqqdorgp958/stackoverflow.zip

最佳答案

这种行为的原因是您异步获取 ajaxTab.aspx 页面的内容并将其粘贴到另一个 aspx 页面。因此,您获得了两个具有 __VIEWSTATE 名称的隐藏字段实例,并且当页面回发到服务器时,它们的值混合在一起(可能取决于浏览器如何在提交时处理具有相同 name 的多个控件).要解决此问题,您可以将第二个选项卡的内容放入框架中:

 <div id="tabs">
<ul>
<li><a href="#tabs-1">Default Tab</a></li>
<li><a href="#tabs-2">ajax Content</a></li>
</ul>
<div id="tabs-1">
<p>
To replicate the error:
<ul>
<li>First use the search box top right to search to prove that code is ok</li>
<li>Then click the second ajax tab, and search again.</li>
<li>N.B. Chrome / IE give a state error, Firefox does not</li>
</ul>
</p>
</div>
<iframe id="tabs-2" src="ajaxTab.aspx" style="width:100%;" ></iframe>
</div>

此外,我不确定,但这似乎是 Web_UserControls_search 控件中的错误。在我看来,NavBarSearchItemNoSearchItem_OnClick 方法必须重构如下:

protected void NavBarSearchItemNoSearchItem_OnClick(object sender, EventArgs e)
{
var searchFieldTbx = NavBarSearchItemNo;
var navBarSearchCatHiddenField = NavBarSearchCatHiddenField;

var term = searchFieldTbx != null ? searchFieldTbx.Text : "";

if (term.Length > 0) //There is actually something in the input box we can work with
{
//Response.Redirect(Url.GetUrl("SearchResults", term));
Response.Redirect(ResolveClientUrl("~/Web/SearchResults.aspx?term=" + term + "&cat=" + navBarSearchCatHiddenField.Value));
}
}

请注意,我们在重定向到搜索结果页面时解析客户端 url,而不是 navBarSearchCatHiddenField 使用 navBarSearchCatHiddenField.Value 作为 cat 参数。

关于c# - 使用 jQuery 选项卡时无效的 ViewState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com