我有一个sitecore项目,其中我准备了一个ascx用户控件的子布局。我需要在这个用户控件中设置级联下拉菜单,并且基于我发现的UpdatePanel是要走的路。问题是UpdatePanel似乎更新了整个控件,我认为这不是正确的行为。ascx中的更新面板刷新整个控件
我知道这里有一些类似的问题,但没有解决方案为我工作。我也开始怀疑这可能是一个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中的空异常。这在控制面板之外。注意:我还添加了一个脚本管理器。
我尝试过很多东西。设置不同的更新模式,通过从软件包管理器控制台执行Install-Package AjaxControlToolkit来更新我的解决方案中的AjaxToolkit ...但行为保持不变。
谢谢。
谢谢。有效。 如果你知道它为什么在OnInit中工作,而不是Page_Load,我将不胜感激?我建立了一个单独的项目来尝试和(非sitecore),如果我在页面加载中保留代码,它工作正常吗? –
它的工作原理是因为在OnInit期间,viewstate值尚未加载。所以你有机会用值填充下拉列表。然后,在OnInit和Page_Load之间,触发PreLoad事件,在此期间视图状态被加载并应用于控件(例如,它设置选定的索引)。有关所有详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms178472.aspx。 –
这确实发生了什么。 – Younes