سؤال

لدي صفحة ASP.NET ، والتي تعرض قائمة بالخيارات للمستخدم. عندما يختارون من القائمة ، فإنه يقوم بتشغيل مرة أخرى والاستعلام عن خادم SQL. يتم عرض النتائج في ListView أسفل الخيارات في لوحة التحديث. فيما يلي مقتطف من itemTemplate:

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" />

لا يظهر DataItemIndex ، لذا فإن CommandArgument فارغ. ومع ذلك ، فإن مرسل الكائن هو الزر الذي يعرض العنصر.

لماذا لا يظهر عنصر الفهرس في CommandArgument؟

هل يمكن أن يكون المنشور؟ إذا كان الأمر كذلك ، فلماذا سيكون هذا المنشور؟ هل هناك طريقة حولها؟

تحرير: آسف ، من محاولاتي لحلها من قبل ، لقد نشرت رمزًا سيئًا ، لكنه لا يزال لا يظهر.

القرار: لقد وجدت عملًا آخر حوله في أن مرسل OnCommand هو زر الارتباط ، الذي يحتوي على CommandArgument. سأقوم بهذه المشكلة لتكون مشكلة مع العديد من النشرات و JavaScript.

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

المحلول

لا يمكنك استخدام <%= %> بناء الجملة داخل الخصائص على علامة مع أ runat="server" ينسب. أنا مندهش من أن الكود سيتم تشغيله. قون

تحديث:

ربما ترغب في استخدام حدث ItemDatAbound على المكرر ، والعثور على LinkButton وتعيين خاصية CommandArgument.

ليست أنيقة للغاية ، ولكن إليك عينة vb.net.

Private Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
    Select Case e.Item.ItemType
      Case ListItemType.Item, ListItemType.AlternatingItem
        Dim b As LinkButton = e.Item.FindControl("btn")
        b.CommandArgument = e.Item.ItemIndex
        b.DataBind()
    End Select
  End Sub

نصائح أخرى

أنت لا تضعه

ربما تريد

<%# Container.DataItemIndex %>

أو

<%= Container.DataItemIndex %>

:)

محاولة

<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" />

كنت تفتقد علامة "#".

ساعدني هذا الموقع حقًا في هذه المشكلة: http://forums.asp.net/t/1671316.aspx

كانت المشكلة التي واجهتها هي أنه تم تمرير الحجج الفارغة في CommandArgument عندما قمت بالنقر فوق الزر للمرة الثانية. كما يوضح المنشور أعلاه ، هذا بسبب تعيين CommandArgument فقط في حدث Databind. لذلك ، لإصلاح هذا ، قم بتضمين حدث Databind في Page_Load Sub

السابق. (VB)

Private Sub BindSelectButtons()       

    'Purpose: bind the data to the select buttons for commandargument to be used
    Dim i As Integer
    For i = 0 To gridview1.Rows.Count - 1
        gridview1.Rows(i).Cells(8).FindControl("btnID").DataBind()
    Next
End Sub

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

    'Rebind select buttons so that the commandargument refreshes
    BindSelectButtons()
End Sub

تأكد من تمكين حالة العرض e.Row.EnableViewState = true ؛

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