لماذا هو بلدي commandargument فارغ؟
-
21-09-2019 - |
سؤال
لدي صفحة 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 ؛