Почему мой командный аргумент пуст?
-
21-09-2019 - |
Вопрос
У меня есть страница ASP.Net, на которой пользователю отображается список опций.Когда они выбирают из списка, он выполняет обратную отправку и запрашивает sql-сервер.Результаты отображаются в виде списка под параметрами на панели обновления.Ниже приведен фрагмент ItemTemplate:
<asp:LinkButton Text="Save IT" OnCommand="SaveIt" CommandArgument="<%# Container.DataItemIndex %>" runat="server" />
DataItemIndex не отображается, поэтому мой командный аргумент пуст.Однако отправителем объекта является кнопка, которая показывает элемент.
Почему элемент индекса не отображается в CommandArgument?
Может быть, это ответная почта?Если да, то почему это должно быть ответное сообщение?Есть ли способ обойти это?
Редактировать:Извините, из-за моих предыдущих попыток решить эту проблему я опубликовал неправильный код, но он по-прежнему не появляется.
Разрешение:Я нашел другой обходной путь в том, что отправителем OnCommand является кнопка link, которая содержит 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 .Итак, чтобы исправить это, включите событие привязки данных в подраздел page_load
Бывший.(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;