Вопрос

У меня есть страница 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;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top