gpt4 book ai didi

c# - DropDownList 不回发,即使设置了 AutoPostBack

转载 作者:太空狗 更新时间:2023-10-29 22:54:04 25 4
gpt4 key购买 nike

帖子末尾的模糊解决方案

使用带有 C# 代码隐藏的 asp.net 页面,我已经成功构建并填充了一个 DropDownList。

我想做的是捕获从下拉列表中选择的新值(最好使用回发到我的代码隐藏)。然后代码隐藏可以根据这个新选择的下拉列表值更新页面上的其他内容。

我的第一次尝试是使用

<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="true" OnSelectedIndexChanged="foo"></asp:DropDownList>

用C#方法

public void foo(object sender, EventArgs e)
{
DropDownList ddl = sender as DropDownList;
string myValue = "";

if (ddl != null)
{
myValue = ddl.SelectedValue;
// Do some stuff
}
}

这没有用。当所选索引更改时,它简单地重新加载了页面,但是iSpostback标志始终是错误的。

所以我筛选了 SO 并尝试了一些不同的策略。最近,我尝试在代码隐藏中注册客户端 onChange 事件并关闭 AutoPostBack。

在 ASP.Net 页面中:

<asp:DropDownList ID="myDDL" runat="server" AutoPostBack="false"></asp:DropDownList>

在代码隐藏中:

myDDL.Attributes.Add("onChange", "doSomeStuff(this);"); // Done on databind.

我添加了客户端javascript来调用页面的__doPostBack函数

<script language="javascript" type="text/javascript">
function doSomeStuff(ddl) {
var ddlVals = document.getElementById(ddl.id);

__doPostBack(ddlVals, '');
}
</script>

这也失败了,虽然当我看到 javascript 正确执行时我认为它会去某个地方。

但是查看代码隐藏,它仍然无法正常工作。当我在 Page_Load 中放置断点时,IsPostBack 为 false!但它应该是一个回发!?它是使用 __doPostBack 回发的,并且(单独)使用 AutoPostBack="true"

所以我挖得更深。

根据这篇 MSDN 文章 (http://msdn.microsoft.com/en-us/library/ms178141(v=VS.85).aspx),基于页面加载的结果,我正在做一个“服务器传输”而不是所需的回发(IsPostBack 为 false,PreviousPage 与预期的一样,是应回发的同一页面,IsCallback 为 false,IsCrossPagePosting 为 false)。

会发生什么劫持 AutoPostBack 和 __doPostBack 以使其看起来和行为像“服务器传输”?

我可以在父控件/page 上设置/检查什么以确保它允许回发?

编辑:

Page_Load 看起来像这样:

private SpecialDataObject _someData;
private string foobar;
public void Page_Load(object sender, EventArgs e)
{
//set some variables.
this.foobar = "blah";

LoadSomeUnrelatedData();

if (!IsPostBack)
{
if (_someData == null)
{
LoadDataWithoutBinding();
}
BindMyData();
}
}

//set some variables 处设置断点,即使在 AutoPostBack 之后,Page.IsPostBack 也始终为 false。

编辑 2:

答案在服务器传输中。在从母版页加载的远程控件中,URL 在到达页面之前被检查并重新路由,有效地否定了我的回发。我之前没有看到它,因为我只在目标页面添加了断点。

最佳答案

我会检查以确保您没有在某处干扰回发的验证。要检查这一点,请在 DropDownList 上将 CausesValidation 设置为 false。

关于c# - DropDownList 不回发,即使设置了 AutoPostBack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099848/

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