Кнопка ссылки на пользовательском элементе управления ASP.NET не срабатывает - PullRequest
3 голосов
/ 06 февраля 2010

У меня есть пользовательский элемент управления, который добавляется к другому пользовательскому элементу управления. Вложенный пользовательский элемент управления состоит из GridView, кнопки изображения и кнопки ссылки. Вложенный пользовательский элемент управления добавляется во внешний элемент управления как объект коллекции на основе результатов, связанных с GridView.

Проблема в том, что моя кнопка ссылки не работает. Я нажимаю на него, и событие не срабатывает. Даже добавление точки останова не было достигнуто. Поскольку вложенный пользовательский элемент управления добавляется несколько раз, я установил для кнопки изображения уникальные идентификаторы, а также для кнопки ссылки. В то время как кнопка изображения работает правильно с ее JavaScript. Кнопка ссылки должна вызвать событие в коде, но, несмотря на все мои усилия, я не могу заставить его работать. Я добавляю кнопку ссылки к элементу управления динамически. Ниже приведен соответствующий код, который я использую:

public partial class ucCustomerDetails : System.Web.UI.UserControl
{
public event EventHandler ViewAllClicked;

protected override void CreateChildControls( )
{
   base.CreateChildControls( );

   string strUniqueID = lnkShowAllCust.UniqueID;
   strUniqueID = strUniqueID.Replace('$','_');
   this.lnkShowAllCust.ID = strUniqueID;
   this.lnkShowAllCust.Click += new EventHandler(this.lnkShowAllCust_Click);
   this.Controls.Add(lnkShowAllCust);
}

protected override void OnInit (EventArgs e)
{
   CreateChildControls( );
   base.OnInit(e);
}

protected override void OnLoad(EventArgs e)
{
   base.EnsureChildControls( );
}

protected void Page_Load(object sender, EventArgs e)
{
   if (IsPostBack)
   {
   CreateChildControls( );
   }
}

protected void lnkShowAllCust_Click(object sender, EventArgs e)
{
   this.OnCustShowAllClicked(new EventArgs ( ));
}

protected virtual void OnCustShowAllClicked(EventArgs args)
{
   if (this.ViewAllClicked != null)
   {
      this.ViewAllClicked(this, args);
   }
}    
}

Я боролся с этой проблемой последние 3 дня, но не добился успеха, и мне действительно нужна помощь.

Может кто-нибудь помочь мне?

Ответы [ 5 ]

2 голосов
/ 16 августа 2012

Мой LinkButton не запускал событие Click, и причина в том, что для свойства CausesValidation было установлено значение True. Если вы не хотите, чтобы ссылка подтверждала форму, обязательно установите для этого параметра значение False.

1 голос
/ 06 февраля 2010

Попробуйте добавить событие клика в тег ссылки кнопки:

<asp:LinkButton runat="server" OnClick="linkShowAllCust_Click" />

Или добавьте его в свою Page_Load:

Page_Load(object sender, EventArgs e) 
{
  this.lnkShowAllCust.Click += new EventHandler(this.lnkShowAllCust_Click);
}
0 голосов
/ 20 ноября 2013

У меня была такая же проблема. У меня было viewstate = "false" на странице, к которой я добавлял элемент управления. (на странице aspx)

0 голосов
/ 06 февраля 2010

Похоже, у вас проблема с состоянием просмотра. Поскольку при загрузке viewstate элемент управления отсутствует, приложение не знает, как подключить событие, которое должно быть запущено. Вот как обойти это.

Вы можете реально заставить ваше приложение работать как обычно, загрузив дерево элементов управления сразу после запуска loadviewstateevent. если вы переопределите событие loadviewstate, вызовите mybase.loadviewstate и затем поместите свой собственный код для регенерации элементов управления сразу после него, значения для этих элементов управления будут доступны при загрузке страницы. В одном из моих приложений я использую поле viewstate для хранения идентификатора или информации о массиве, которую можно использовать для воссоздания этих элементов управления.

Protected Overrides Sub LoadViewState(ByVal savedState As Object)
    MyBase.LoadViewState(savedState)
    If IsPostBack Then
        CreateMyControls()
    End If
End Sub
0 голосов
/ 06 февраля 2010

Пользовательский контроль в пределах сетки? Если это так, зарегистрируйте обработчик события в onrowcreated событии gridview.

...