2013-10-10 2 views
1

На моей странице ASP.Net у меня есть PlaceHolder и Button. Когда пользователь нажимает эту кнопку, я добавляю некоторые UserControls из моего метода getControl интерфейса в PlaceHolder. Код:ASP.NET динамически добавляет UserControl в PlaceHolder, а не fire Click Event, только Page_Load

protected void ActionBtn_Click(object sender, EventArgs e) 
    { 
     if (provider != null) 
     { 
      actualObject = (PlaceHolder)provider.getControl(); 
      PlaceHolder1.Controls.Add(actualObject); 
     } 
    } 

Метод getControl:

public object getControl() 
    { 
     ph = new PlaceHolder(); 

     exportInbBtn = new Button(); 
     exportInbBtn.Text = "Export Inventury"; 
     exportInbBtn.Click += new EventHandler(myButton_ServerClick); 
     ph.Controls.Add(exportInbBtn); 
     exportInbBtn.ID = "exportInbBtn"; 

     return ph; 
    } 

Методы Page_Load и Page_Init в ASP странице пустые. Проблема в том, что когда пользователь нажимает кнопку exportInbBtn (с текстом: «Export Inventury»), событие click myButton_ServerClick не будет расти. Обновление только веб-страницы. Я готов ответить, но я не могу понять, как легко решить эту проблему.

+0

Есть страница. LoadControl: http://www.codeproject.com/Articles/7908/Dynamically-Loading-User-Control-on-a-Webform-usin – RetroCoder

ответ

5

Если вы запускаете событие * myButton_ServerClick *, вызывается обратная передача, и ASP.Net хочет запустить вызванное событие, но ваш элемент управления не добавляется на страницу, поэтому ASP.Net игнорирует это событие.

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

Update

Что-то вроде этого

Страница: за

<asp:Button runat="server" ID="btnTest" Text="Add control" OnClick="btnTest_Click"/> 
<asp:Label runat="server" ID="result"></asp:Label> 
<asp:HiddenField runat="server" ID="controlLoaded"/> 
<asp:PlaceHolder runat="server" ID="phTest"></asp:PlaceHolder> 

Код:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (controlLoaded.Value == "1") 
     { 
      AddControl(); 
     } 
    } 

    protected void btnTest_Click(object sender, EventArgs e) 
    { 
     AddControl(); 
    } 

    protected void myButton_ServerClick(object sender, EventArgs e) 
    { 
     result.Text = "OK"; 
    } 

    public object getControl() 
    { 
     var ph = new PlaceHolder(); 

     var exportInbBtn = new Button(); 
     exportInbBtn.Text = "Export Inventury"; 
     exportInbBtn.Click += new EventHandler(myButton_ServerClick); 
     ph.Controls.Add(exportInbBtn); 
     exportInbBtn.ID = "exportInbBtn"; 

     return ph; 
    } 

    private void AddControl() 
    { 
     var actualObject = (PlaceHolder)getControl(); 
     phTest.Controls.Add(actualObject); 
     controlLoaded.Value = "1"; 
    } 
+1

Что вы думаете «После обратной передачи и до события быть уволенным"? Можете ли вы написать пример кода, где мне нужно добавить элемент управления? –

+0

Я обновил свой ответ. – Rudis

0

page.aspx

<asp:PlaceHolder ID="PlaceHolder1" runat="server" ></asp:PlaceHolder> 

page.aspx.vb

Private Sub CreateControl() 
    Dim vw As Control 
    vw = CType(LoadControl("~/View01.ascx"), View01) 
    vw.ID = "View_Dyn" 
    PlaceHolder1.Controls.Clear() 
    PlaceHolder1.Controls.Add(vw) 
End Sub 

Воссоздать это каждый постбэк

Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init 
    CreateControl() 
End Sub 
0

Пожалуйста, обратите внимание, что элементы управления UserControl добавляют ниже метод - // Сначала создаем экземпляр пользовательского элемента управления var control = Page.LoadControl ("~/folder1/Use rControl1.ascx ")

// Теперь добавьте этот элемент управления в placeholder как - placeHolder1.Controls.Add (control);

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^