ASP.Net:لماذا هو بلدي زر انقر/الأحداث الأمر ليس ملزما/اطلاق النار في مكرر?

StackOverflow https://stackoverflow.com/questions/42396

سؤال

هنا هو رمز من ascx التي مكرر:

<asp:Repeater ID="ListOfEmails" runat="server" >
    <HeaderTemplate><h3>A sub-header:</h3></HeaderTemplate>
    <ItemTemplate>
        [Some other stuff is here]
        <asp:Button ID="removeEmail" runat="server" Text="X" ToolTip="remove" />
    </ItemTemplate>
</asp:Repeater>

و في codebehind بالنسبة مكرر هو databound والأحداث:

Protected Sub ListOfEmails_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles ListOfEmails.ItemDataBound
    If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
        Dim removeEmail As Button = CType(e.Item.FindControl("removeEmail"), Button)
        removeEmail.CommandArgument = e.Item.ItemIndex.ToString()

        AddHandler removeEmail.Click, AddressOf removeEmail_Click
        AddHandler removeEmail.Command, AddressOf removeEmail_Command
    End If
End Sub

Sub removeEmail_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Response.Write("<h1>click</h1>")
End Sub

Sub removeEmail_Command(ByVal sender As Object, ByVal e As CommandEventArgs)
    Response.Write("<h1>command</h1>")
End Sub

لا انقر فوق أو الأمر يزداد دعا, ما الخطأ الذي فعلته ؟

هل كانت مفيدة؟

المحلول

ضوابط متداخلة داخل الراسبين لا اعتراض الأحداث.بدلا من ذلك تحتاج إلى ربط Repeater.ItemCommand هذا الحدث.

ItemCommand يحتوي على RepeaterCommandEventArgs الذي فقد اثنين من المجالات الهامة:

  • CommandName
  • CommandArgument

لذا تافهة سبيل المثال:

void rptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        // Stuff to databind
        Button myButton = (Button)e.Item.FindControl("myButton");

        myButton.CommandName = "Add";
        myButton.CommandArgument = "Some Identifying Argument";
    }
}

void rptr_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "Add")
    {
        // Do your event
    }
}

نصائح أخرى

تحتاج إلى التعامل مع ItemCommand الحدث على مكرر.هنا مثال.

ثم الخاص بك من النقرات على زر سيتم التعامل معها من قبل ListOfEmails_ItemCommand الأسلوب.لا أعتقد الأسلاك حتى انقر فوق الأمر أو الحدث (الزر) في ItemDataBound العمل.

إذا كنت تخطط لاستخدام ItemCommand الحدث ، تأكد من تسجيل ItemCommand الحدث في Page_Init في Page_Load.

protected void Page_Init(object sender, EventArgs e)
{
    // rptr is your repeater's name
    rptr.ItemCommand += new RepeaterCommandEventHandler(rptr_ItemCommand);
}

أنا لست متأكدا من السبب في أنه لم يكن العمل بالنسبة لي مع هذا الحدث مسجل في Page_Load ولكن الانتقال إلى Page_Init ساعد.

هنا تجربة لمحاولة لكم:

تعيين نقطة توقف على ListOfEmails_ItemDataBound ومعرفة ما إذا كان يتم دعا postbacks.

هل تعرف ما هو محبط عن هذا ؟

إذا قمت بتحديد OnClick في هذا asp:Button الوسم ، بناء سوف تحقق من أن يدعى الأسلوب موجود في codebehind صف تقرير خطأ إذا كان لا...على الرغم من أن هذه الطريقة لن تحصل على ما يسمى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top