Здравствуйте!
Есть проблема с обратным вызовом в ASP.NET - все работает замечательно с Label, а с TextBox не хочет:
у меня есть CompositeControl в нем объявлен:
protected override void OnPreRender(EventArgs e)
{
String sScript = @"function DoIncrement(name){var tmp = name.value; name.value = ++tmp;}";
this.Page.ClientScript.RegisterClientScriptBlock(typeof(Button), "DoIncrement", sScript, true);
base.OnPreRender(e);
}
дальше есть:
protected override void CreateChildControls()
{
//call the parent method
base.CreateChildControls();
this.Controls.Clear();
CreateControlHierarchy();
}
protected void CreateControlHierarchy()
{
DynamicPanel pnl = (DynamicPanel)Find(Page, PanelID);
<strong> вот здесь вся проблема: если TextBox заменить Label (и соответственно все value на innerHTML) то все работает замечательно (без PostBack - т.е. не заходит в CreateChildControls() и не пересоздает все контролы), но с TextBox происходит постоянное обновление страницы - что мне не нужно! Как это побороть?</strong>
TextBox textBox = new TextBox();
textBox.ID = "MyLabel";
textBox.Text = "1";
this.Controls.Add(textBox);
string nameid = textBox.UniqueID.Replace('$', '_');
//Add the Button
Button btn = new Button();
btn.ID = "test1";
btn.Text = "increment";
btn.UseSubmitBehavior = false;
btn.OnClientClick = "javascript:" + String.Format("DoIncrement({0})", nameid);
string callback = pnl.GetCallbackScript(btn, String.Format("{0}.value", nameid)) + ";return false;";
btn.Attributes.Add("onclick", callback);
this.Controls.Add(btn);
this.ChildControlsCreated = true;
}
|