gpt4 book ai didi

asp.net - ascx中的Updatepanel刷新整个控件

转载 作者:行者123 更新时间:2023-12-02 16:07:49 24 4
gpt4 key购买 nike

我有一个 sitecore 项目,其中我准备了一个 ascx 用户控件形式的子布局。我需要在此用户控件中设置级联下拉菜单,并且根据我的发现,UpdatePanel 是可行的方法。问题是 UpdatePanel 似乎正在刷新整个控件,我认为这不是正确的行为。

我知道 SO 上有一些类似的问题,但没有一个解决方案对我有用。我也开始怀疑这可能是 Sitecore 特定的问题。

这是用户控件的代码示例:

    <p><%= MyItem.Text %>" /></p>

<asp:UpdatePanel ID="LocationFilterUpdatePanel" runat="server">
<ContentTemplate>

<asp:DropDownList ID="DDL1" OnSelectedIndexChanged="DDL1_SelectedIndexChanged" runat="server" AutoPostBack="true">

</asp:DropDownList>


<asp:DropDownList ID="DDL2" OnSelectedIndexChanged="DDL2_SelectedIndexChanged" runat="server" AutoPostBack="true">

</asp:DropDownList>

</ContentTemplate>
</asp:UpdatePanel>

以及背后的代码:

    protected void Page_Load(object sender, EventArgs e)
{
if (!System.Web.UI.ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
{
var context = new SitecoreContext();
//Get Model from Sitecore

DDL1.DataSource = Model.Data;
DDL1.DataValueField = "Id";
DDL1.DataTextField = "Name";
DDL1.DataBind();
}

}

protected void DDL1_SelectedIndexChanged(object sender, EventArgs e)
{
var context = new SitecoreContext();
//Get Model from Sitecore

DDL2.DataSource = Model.Data;
DDL2.DataValueField = "Id";
DDL2.DataTextField = "Name";
DDL2.DataBind();
}

protected void DDL2_SelectedIndexChanged(object sender, EventArgs e)
{

}

页面加载正常,但是(调试时)更改 DDL1 的索引将在 MyItem.Text 中显示 Null 异常。这是在控制面板之外。注意:我还添加了一个脚本管理器。

我尝试过很多事情。设置不同的更新模式,通过从包管理器控制台执行 Install-Package AjaxControlToolkit 更新了我的解决方案中的 AjaxToolkit...但行为保持不变。

谢谢。

最佳答案

将 DDL1 的数据绑定(bind)放入 OnInit,而不是 Page_Load
并且不要在其中包含 if 语句,只需执行数据绑定(bind)即可。
OnInit 之后,所选值将被正确设置,您将能够在其他事件处理程序中访问 DDL1 的选项。

关于asp.net - ascx中的Updatepanel刷新整个控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20516211/

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