c# - 有没有办法让asp.net Boundfield成为一个链接?

标签 c# asp.net

如果之前有人问过这个问题,我很抱歉,但我已经在论坛中搜索了很长一段时间,但未能找到解决我的问题的方法。

我目前正在开发一个网络应用程序,用户可以在其中捐赠瓶子押金。当用户上传瓶子后,它们将显示在下表中: Snippet of the table

数据显示在带有 SqlDataSource 的 GridView 中。代码:

<div class="table-responsive col-8">
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:WeCANConnectionString %>"
                    SelectCommand="SELECT [creator], [amount], [details], 
                    [imageurl], [pickup], [available_from] FROM [deposit] ORDER BY [id] DESC"></asp:SqlDataSource>
                <asp:GridView id="GridView1" class="table table-hover table-striped table-bordered" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
                    <Columns>
                        <asp:BoundField DataField="creator" HeaderText="Uploaded By" SortExpression="creator" />
                        <asp:BoundField DataField="amount" HeaderText="Amount" SortExpression="amount" />
                        <asp:BoundField DataField="details" HeaderText="Details" SortExpression="details" />
                        <asp:BoundField DataField="imageurl" HeaderText="Image" SortExpression="imageurl" />
                        <asp:BoundField DataField="pickup" HeaderText="Location of the bottles" SortExpression="pickup" />
                        <asp:BoundField DataField="available_from" HeaderText="Available from" SortExpression="available_from" />
                    </Columns>

                </asp:GridView>

我希望能够单击每个单独的帖子并创建动态页面,其中显示数据库中的更多数据。我在某处读到,我可以使用每个帖子的 ID 创建这些页面,但我找不到任何显示其工作原理的内容。

请随意提出以下任何问题。这是我的第一篇文章,所以我不确定我是否已经涵盖了所有内容。

提前非常感谢。

最佳答案

实现此目的的一种方法是在每行中添加一个链接。首先,您需要将“id”添加到数据源中的 SELECT 中,以便在绑定(bind)表时可以访问数据。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:WeCANConnectionString %>"
    SelectCommand="SELECT [id], [creator], [amount], [details], [imageurl], 
    [pickup], [available_from] FROM [deposit] ORDER BY [id] DESC">
</asp:SqlDataSource>

然后在 GridView 中,创建一个包含超链接的模板列,并让该超链接的 NavigateUrl 使用查询字符串上的 ID 打开一个新页面。如果您不希望 ID 在 URL 中公开,则可能需要以某种方式对其进行混淆,或者在数据库中为每条记录使用 GUID 列。只要你能认出来。您的 NavigateUrl 可以是您想要的任何页面,但在本例中我使用了 DetailPage.aspx。

<asp:GridView id="GridView1" class="table table-hover table-striped table-bordered" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="DetailsLink" runat="server" 
                    NavigateUrl="DetailPage.aspx?id=<%# Eval("id")%>"
                    Text="Details" Target="_blank">
                </asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="creator" HeaderText="Uploaded By" SortExpression="creator" />
        <asp:BoundField DataField="amount" HeaderText="Amount" SortExpression="amount" />
        <asp:BoundField DataField="details" HeaderText="Details" SortExpression="details" />
        <asp:BoundField DataField="imageurl" HeaderText="Image" SortExpression="imageurl" />
        <asp:BoundField DataField="pickup" HeaderText="Location of the bottles" SortExpression="pickup" />
        <asp:BoundField DataField="available_from" HeaderText="Available from" SortExpression="available_from" />
    </Columns>
</asp:GridView>

<@# Eval('id')@> 会将每行的 ID 呈现为 URL 中的查询字符串。

关于c# - 有没有办法让asp.net Boundfield成为一个链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61509610/

相关文章:

c# - 具有临时 EntityKey 值的对象不能附加到对象上下文

c# - 如何调用默认方法而不是具体实现

c# - 如何以编程方式设置附加属性?

javascript - 为什么 Angularjs 调用 Controller 两次?

c# - ASP.NET 登录控件 - 我可以将 FailureText 添加为 ValidationSummary 中的一个项目吗?

c# - 清理 URL 中的外来字符/口音

c# - 关于 Java 和 C# 中访问说明符的混淆

c# - 制作 Linq 对象 "dirty"的最干净的方法是什么?

c# - 在标记中使用函数返回的服务器控件

C# if 语句速记运算符 (?:) results in unreachable code