Создание пользовательской кнопки в ListView в ASP.NET

У меня есть страница Results.aspx, которая отображает результирующие записи, запрошенные с использованием объекта SqlDataSource через ListView. Я хочу добавить кнопку «Просмотр», которая будет отображаться рядом с каждой записью, и при ее нажатии я попаду на отдельную страницу, на которой будут отображаться сведения об этой записи. Как мне это сделать?

Редактировать

Я попробовал то, что вы сказали, цитроны, и вот что я придумал:

<td>
    <asp:CheckBox ID="CheckBox1" runat="server" />
</td>
<td>
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="ViewButtonClick" CommandArgument='<%# Eval("ServiceId") %>'>View</asp:LinkButton>
</td>

И вот метод, который я хочу назвать:

protected void ViewButtonClick(object sender, CommandEventArgs e)
    {
        var serviceId = Convert.ToInt32(e.CommandArgument);

        ServiceToView = DataAccessLayer.Service.Select(new Service { ServiceId = serviceId });
        Server.Transfer("~/ViewService.aspx");
    }

К сожалению, на самом деле ничего не происходит... я что-то упустил?

Изменить -- исправлено

Я что-то пропустил! У меня было CommandName, равное имени моего метода, а не OnCommand. Я убрал CommandName, сохранил бит аргумента и заменил CommandName на OnCommand. Теперь все работает, но зачем мне CommandName?


person MintGrowth    schedule 24.02.2011    source источник


Ответы (2)


Вы можете добавить LinkButton в ItemTemplate ListView.
Привяжите значение, идентифицирующее каждую запись, к CommandArgument LinkButton.
Подпишитесь на Command-Event LinkButton. Там у вас есть доступ к CommandEventArgs.CommandArgument

person citronas    schedule 24.02.2011
comment
@Storm Kiernan: OnCommand — это место, где вы указываете метод на стороне сервера, который вызывается, если кто-то нажимает кнопку. CommandName лучше всего объяснить, взглянув на GridView. Существуют различные виды «действий», которые вы можете выполнять, например «Выбрать», «Добавить», «Редактировать», «Удалить». GridView предлагает RowCommand-Event, в котором вы используете случай переключения, вызывающий другие методы в соответствии с указанным CommandName. Вы также можете указать свое собственное имя команды, как вы пытались раньше. Это имеет смысл, если вы добавляете настраиваемые кнопки в GridView, например «Отправить электронное письмо клиенту». - person citronas; 25.02.2011

То, чем ты закончил заниматься, сработало со Штормом. Я решил согласиться с предложением Citronas и поделиться своим ответом.

ПЕРВЫЙ: на aspx я добавил LinkButton в свой ItemTemplate с моими собственными CommandName и CommandArgument. Я передал идентификатор своего элемента в качестве CommandArgument, чтобы позже использовать его в своей подпрограмме.

<asp:LinkButton ID="lnkBtnAnswers" runat="server" CommandName="Answers"
     CommandArgument='<%# Eval("ID")%>'>Answers</asp:LinkButton>

ВТОРОЕ: в отделенном коде я создал подпрограмму, которая будет вызываться всякий раз, когда пользователь выполняет какое-либо действие. Как упоминал Citronas, обычно вы используете здесь «Выбрать», «Добавить», «Редактировать» или «Удалить». Решил создать "ответы".

Примечание. Обрабатывает MyControl.ItemCommand здесь очень важно, так как это то, что подписывается на событие команды.

Protected Sub lvQuestions_Command(sender As Object, e As CommandEventArgs) Handles lvQuestions.ItemCommand
    If e.CommandName.ToLower() = "answers" Then
          hfSelectedQuestionID.Value = e.CommandArgument
    End If
End Sub

Сделанный! Теперь, поскольку каждая команда проходит через новую подпрограмму, важно проверить правильное имя команды, чтобы вы могли выполнить соответствующее действие. Не забудьте использовать CommandArgument в своих интересах.

person Cesar    schedule 08.05.2014