我有一个Results.aspx页面,它显示通过ListView使用SqlDataSource对象查询的结果记录。我想添加一个“查看”按钮,它将出现在每个记录的旁边,点击后会转到一个单独的页面,显示有关该记录的详细信息。我该如何做到这一点?
我已经尝试过你所说的,citronas,这就是我的想法:
<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,保留了参数位并用OnCommand替换了CommandName。现在一切正常,但我需要什么CommandName?
答案 0 :(得分:1)
您可以将LinkButton添加到ListView的ItemTemplate中 将标识每条记录的值绑定到LinkButton的CommandArgument 订阅LinkButton的Command-Event。在那里你可以访问CommandEventArgs.CommandArgument
答案 1 :(得分:0)
你做了什么工作Storm。我决定和Citronas一起去#39;建议并分享我的答案。
<强> FIRST:强> 在aspx上,我使用自己的CommandName和CommandArgument为我的ItemTemplate添加了一个LinkButton。我将我的项目ID作为CommandArgument传递给了我以后可以在我的sub中使用它。
<asp:LinkButton ID="lnkBtnAnswers" runat="server" CommandName="Answers"
CommandArgument='<%# Eval("ID")%>'>Answers</asp:LinkButton>
<强> SECOND:强> 在代码隐藏中,我创建了一个sub,只要用户执行了一个动作就会调用它。正如Citronas通常提到的那样,您使用&#34;选择&#34;,&#34;添加&#34;,&#34;编辑&#34;或&#34;删除&#34;这里。我决定创建&#34;答案&#34;。
注意:处理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
完成!现在,由于每个命令都通过新子命令,因此检查正确的commandName非常重要,这样您就可以执行相应的操作。不要忘记使用CommandArgument。