"不能与ID'XXX',因为它并没有使用ScriptManager注册...&QUOT注销UpdatePanel的;在radgrid控件,而编辑记录 [英] "Cannot unregister UpdatePanel with ID 'xxx' since it was not registered with the ScriptManager... " in RadGrid while editing record
问题描述
让我切入正题。我的情况如下:我的自定义字段添加到过滤radgrid控件和过滤完美的作品。问题是当我想用里面radgrid控件EditForm编辑记录。它用来做工精细,但后来我遇到了一些问题,选择合适的行(我总是得到错误的行选择),所以这是我做过什么来解决它。
Let me cut to the chase. My scenario is as follows: I have custom added fields to filter the RadGrid and filtering works perfectly. The problem comes when I want to edit record using EditForm inside RadGrid. It used to work fine, but then I had some problems with selecting the right row (I was always getting the wrong row selected) so this is what I did to fix it.
所以,我带过滤器radgrid控件看起来是这样的:
So, my RadGrid with filters looks like this:
我所做的是使用会话,这将帮助我们后来确定过滤radgrid控件的DataSource启动或它是默认的。
What I did is to use the Session which will help us to determine later if the filtered RadGrid DataSource was initiated or it was the default one.
protected void btnSearch_Click(object sender, EventArgs e)
{
Session["SearchKontakti"] = "1";
}
之后,我不得不设置preRender如果用循环来检查pviously提到会话$ P $。
After that I had to set PreRender with if loop to check for previously mentioned Session.
protected void gvKontakti_PreRender(object sender, EventArgs e)
{
int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);
if (Session["SearchKontakti"] == "1")
{
var kontakti = from k in db.Kontakt
select k;
int idTipUsera = Convert.ToInt32(rcbTipUsera.SelectedValue);
int idTvrtka = Convert.ToInt32(rcbTvrtka.SelectedValue);
if (rcbTvrtka.SelectedValue != "0")
{
kontakti = kontakti.Where(k => k.idFirma == idTvrtka);
}
if (rcbTipUsera.SelectedValue != "0")
{
kontakti = kontakti.Where(k => k.idOvlasti == idTipUsera);
}
if (chkAktivan.Checked == true)
{
kontakti = kontakti.Where(k => k.Aktivan == true);
}
else
{
kontakti = kontakti.Where(k => k.Aktivan == false);
}
int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]);
if (idKontakt > 0 && idAuthKontakt == idKontakt)
{
gvKontakti.DataSource = from k in kontakti
where k.idKontakt == idKontakt
orderby k.Prezime, k.Ime
select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
}
else if (idKontakt > 0 && idAuthKontakt != idKontakt)
{
gvKontakti.DataSource = from k in kontakti
where k.idKontakt == idKontakt
orderby k.Prezime, k.Ime
select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
}
else
{
gvKontakti.DataSource = from k in kontakti
orderby k.Prezime, k.Ime
select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
}
gvKontakti.DataBind();
}
}
所以,这个固定我的首要问题,但给了我一个又一个。我的一些用户控件中包含的UpdatePanel并具有它,每当我尝试短声从radgrid控件我收到以下消息编辑按钮,每个用户控件:无法与ID为UpdatePanel4注销UpdatePanel的,因为它没有使用ScriptManager注册。如果在UpdatePanel从控制树中删除,后来再次添加,这是不支持此可能发生。
参数名:的UpdatePanel
我想知道的是如何解决它。
What I'd like to know is how to fix it.
问候,
赫尔沃耶
推荐答案
我不知道为什么,但不知何故的UpdatePanel
是未注册从 ScriptManger
两次(它发生在 RadGrid.Rebind()
方法太,我被卡住的情况),它是由未注册的第二次ScriptManger你得到无法注销的UpdatePanel ...错误。
I don't know why, but somehow the UpdatePanel
is unregistered from the ScriptManger
twice (it happens in RadGrid.Rebind()
method too; the situation I was stuck in), and the second time it's unregistered from ScriptManger you get the "Cannot unregister UpdatePanel ..." error.
解决方法是注册的UpdatePanel
与 ScriptManger
某处两注销事件之间,使用反射,如这样的:
The workaround is to register the UpdatePanel
with the ScriptManger
somewhere between the two unregister events, using reflection, like this:
protected void UpdatePanel_Unload(object sender, EventArgs e) {
MethodInfo methodInfo = typeof(ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(i => i.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")).First();
methodInfo.Invoke(ScriptManager.GetCurrent(Page),
new object[] { sender as UpdatePanel });
}
您应该添加 UpdatePanel_Unload
来在UpdatePanel的 onunload的
事件:
you should add the UpdatePanel_Unload
to the OnUnload
event of the UpdatePanel:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnUnload="UpdatePanel_Unload">
您可以找到问题<一的完整细节href=\"http://msmvps.com/blogs/luisabreu/archive/2006/11/16/adding-removing-updatepanels-dynamicaly-from-a-page.aspx\">here
这篇关于&QUOT;不能与ID'XXX',因为它并没有使用ScriptManager注册...&QUOT注销UpdatePanel的;在radgrid控件,而编辑记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!