यह एक बेहद आम मुद्दा है और सभी स्पष्ट समाधानों को समाप्त कर दिया है, मुझे उम्मीद है कि एसओ मुझे कुछ इनपुट दे सकता है ... मेरे पास एक पृष्ठ के अंदर UserControl है एक दोहराना आवास कई नियंत्रण जो पोस्टबैक का कारण बनता है। समस्या यह है कि पुनरावर्तक के अंदर के सभी नियंत्रण कभी भी अपने ईवेंट हैंडलर को पोस्टबैक नहीं करते हैं, लेकिन पुनरावर्तक (अभी भी यूसी में) के बाहर नियंत्रण सही ढंग से संभाले जाते हैं। मैंने पहले से ही सुनिश्चित किया है कि if(!IsPostBack)
गुम होने के कारण मेरे नियंत्रण पुन: उत्पन्न नहीं किए जा रहे थे और मैंने सत्यापित किया कि Request.Form ["__ EVENTTARGET"] में पृष्ठ_लोड ईवेंट में सही नियंत्रण आईडी शामिल है। मैंने एक अलग परियोजना में लक्षणों का पुनरुत्पादन करने का प्रयास किया और यह काम करता था जैसा कि इसे करना चाहिए।एएसपी.नेट - नियंत्रण घटनाएं पुनरावर्तक के अंदर फायरिंग नहीं
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NoteListControl.ascx.cs"
Inherits="SantekGBS.Web.UserControls.NoteListControl" %>
<asp:UpdatePanel ID="upNotes" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="NoteList" id="divNoteList" runat="server">
<asp:Repeater ID="repNotes" runat="server">
<HeaderTemplate>
<table width="98%" cellpadding="3" cellspacing="0">
</HeaderTemplate>
<ItemTemplate>
<tr class="repeaterItemRow">
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Content/images/DeleteIcon.gif"
OnClick="ibRemove_Click" CommandArgument='<%# Container.ItemIndex %>' CommandName='<%# Eval("ID") %>'
CausesValidation="false" AlternateText="Delete" />
<%# Eval("Text") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<asp:PlaceHolder ID="phNoNotes" runat="server" Visible="false">
<div class="statusMesssage">
No notes to display.
</div>
</asp:PlaceHolder>
</div>
</ContentTemplate>
</asp:UpdatePanel>
public partial class NoteListControl : UserControl
{
[Ninject.Inject]
public IUserManager UserManager { get; set; }
protected List<Note> Notes
{
get
{
if (ViewState["NoteList"] != null)
return (List<Note>)ViewState["NoteList"];
return null;
}
set { ViewState["NoteList"] = value; }
}
public event EventHandler<NoteEventArgs> NoteAdded;
public event EventHandler<NoteEventArgs> NoteDeleted;
public event EventHandler<NoteEventArgs> NoteChanged;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
UtilityManager.FillPriorityListControl(ddlPriority, false);
}
}
protected void ibRemove_Click(object sender, ImageClickEventArgs e)
{
System.Diagnostics.Debug.WriteLine("ibRemove POSTBACK"); // This is NEVER hit
}
public void Fill(List<Note> notes)
{
Notes = notes;
RefreshRepeater();
}
private void RefreshRepeater()
{
if (Notes != null && Notes.Any())
{
var sorted = Notes.OrderByDescending(n => n.Timestamp);
Notes = new List<Note>();
Notes.AddRange(sorted);
repNotes.Visible = true;
phNoNotes.Visible = false;
repNotes.DataSource = Notes;
repNotes.DataBind();
}
else
{
repNotes.Visible = false;
phNoNotes.Visible = true;
}
}
}
public class NoteEventArgs : EventArgs
{
public Note Note { get; set; }
public NoteEventArgs()
{ }
public NoteEventArgs(Note note)
{
this.Note = note;
}
}
कोड जानबूझकर कार्यक्षमता नहीं है, ताकि सिर्फ इतना है कि इस तथ्य की उपेक्षा।
अच्छी पकड़, लेकिन आप वास्तव में उस पर ध्यान दे सकते हैं। मैं जो मार्कअप दिखा रहा हूं वह उत्पादन कोड के समान नहीं है। मैंने उस प्रभाव को दिखाने के लिए बनाया है। ItemTemplate के अंदर सभी नियंत्रण एक ही तरीके से व्यवहार करते हैं। –