ascx中的Updatepanel正在刷新整个控件



我有一个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异常。这在控制面板之外。注意:我还添加了一个脚本管理器。

我试过很多东西。设置不同的更新模式,通过从Package Manager控制台执行Install Package AjaxControlToolkit来更新我的解决方案中的AjaxToolkit。。。但行为保持不变。

谢谢。

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

您有一个将AutoPostBack设置为true的asp:DropDownList控件。

从Dropdownloadlist控件中删除AutoPostBack=true,并为UpdatePanel设置异步触发器,设置为Dropdownloadlist及其eventname="SelectedIndexChanged"

这是一个众所周知的问题,你可以找到很多关于它的文档。

最新更新