asp.net 超链接在同一页面上打开第二个“窗口”

wnrlj8wa  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(116)

我有这个密码。我有一个网格,其中的列有一个orderID,该ID带有一个超链接,该超链接调用一个名为getorderInfo的方法,该方法打开一个新页面,该页面带有一个订单信息网格。但我不需要新的一页。我需要它保持在同一页上,并有网格显示在底部。
我尝试了几个不同的东西,所有的结果要么是一个新的页面或弹出窗口。我试着在网上找这样的东西,但我没有运气。我能做的最好的就是一个新的页面,尽管我希望有一些明显的东西我错过了动态改变当前页面从一个网格到两个。

<rad:GridTemplateColumn DataField="OrderId" DataType="System.Int32" SortExpression="OrderId"
      UniqueName="OrderId">
      <ItemTemplate>
           <!--- link--->
           <asp:HyperLink runat="server" ID="HyperLink1" NavigateUrl='<%# GetOrderInfo(Eval("OrderId")) %>'
                Text='<%# Eval("OrderId") %>' />
      </ItemTemplate>
</rad:GridTemplateColumn>
Protected Function GetOrderInfo(ByVal OrderId As Integer) As String
        Return String.Format("javascript:editItem(""{0}"",""{1}"",""{2}"");", "OrderInfo.aspx", "OrderId", Server.HtmlEncode(OrderId))
    End Function
xwbd5t1u

xwbd5t1u1#

为什么不考虑在网页上只使用两个简单的div区域呢?
因此,当用户单击GridView的一行时,您将隐藏GridView(和区域),然后沿着显示第二个网格区域以及一些详细信息。用户发现这种类型的UI很容易使用,而且编写这样的代码也很容易。
因此,对于本例,我们假设有一个酒店列表(在GridView中)。
我们要点击其中一家酒店,并在另一个GridView中显示预订该酒店的人。
所以,我们的第一个GridView(酒店列表)。

<div id="Hotels" runat="server">
            <h3><i>Hotels and Bookings</i></h3>
            <asp:GridView ID="GVHotels" runat="server" AutoGenerateColumns="False"
                DataKeyNames="ID" CssClass="table table-hover" 
                Width="55%"
                >
                <Columns>
                    <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
                    <asp:BoundField DataField="LastName" HeaderText="LastName" />
                    <asp:BoundField DataField="City" HeaderText="City" />
                    <asp:BoundField DataField="HotelName" HeaderText="Hotel" />
                    <asp:BoundField DataField="Description" HeaderText="Description" />
                    <asp:TemplateField HeaderText="Bookings">
                        <ItemTemplate>
                            <asp:Button ID="cmdView" runat="server" Text="Bookings" 
                                class="btn myshadow"
                                OnClientClick="return callme(this)"
                                OnClick="cmdView_Click" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

        </div>

请注意带有runat=“server”的简单div。runat=server标记允许代码隐藏第一个GridView区域,并显示第二个GridView区域。在这种情况下,第二个网格将显示从第一个网格中选择的预订到酒店的人。因此,在上面的第一个div和网格区域下面,我们将第二个div区域与第二个GridView一起放入。这是:

<div id="Bookings" runat="server" visible="false">

            <h3 id="HotelName" runat="server"></h3>
            <h4 id="Desc" runat="server"></h4>
            <br />
            <h4><i>Bookings</i></h4>

            <asp:GridView ID="GVPeople" runat="server"
                AutoGenerateColumns="False" DataKeyNames="ID"
                CssClass="table table-hover"
                Width="45%">
                <Columns>
                    <asp:BoundField DataField="BookingName" HeaderText="BookingName" />
                    <asp:BoundField DataField="FromDate" HeaderText="FromDate" />
                    <asp:BoundField DataField="ToDate" HeaderText="ToDate" />
                    <asp:TemplateField HeaderText="View">
                        <ItemTemplate>
                            <button id="cmdViewPeople" runat="server" type="button"
                                onserverclick="cmdViewPeople_ServerClick"
                                class="btn myshadow">
                                <span class="fa fa-bed fa-lg"> Booking Details</span>
                            </button>

                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

            <button id="cmdBack" runat="server" type="button"
                onserverclick="cmdBack_ServerClick"
                class="btn myshadow"
                >
                <span class="fa fa-home fa-lg"> Back to Hotels</span>
            </button>

        </div>

让所有这些神奇工作的代码非常简单:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid
    End If

End Sub

Sub LoadGrid()

    GVHotels.DataSource = MyRst("SELECT * FROM tblHotelsA
                                WHERE ID IN (select Hotel_id FROM BOOKINGS)
                                ORDER BY HotelName")
    GVHotels.DataBind()

End Sub

GridView上面的行按钮点击代码:

Protected Sub cmdView_Click(sender As Object, e As EventArgs)

    Dim btn As Button = sender
    Dim gRow As GridViewRow = btn.NamingContainer
    Dim HotelPK As Integer = GVHotels.DataKeys(gRow.RowIndex).Item("ID")

    ' Show people booked in this hotel:
    Dim cmdSQL As _
        New SqlCommand("SELECT * FROM Bookings
                        WHERE Hotel_ID = @ID
                        ORDER BY FromDate, ToDate")

    cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = HotelPK
    GVPeople.DataSource = MyRstP(cmdSQL)
    GVPeople.DataBind()

    HotelName.InnerHtml = $"<i>{gRow.Cells(3).Text}</i>"
    Desc.InnerHtml = $"<i>{gRow.Cells(4).Text}</i>"

    Hotels.Visible = False    ' hide hotel grid area
    Bookings.Visible = True     ' show bookings area

End Sub

Protected Sub cmdBack_ServerClick(sender As Object, e As EventArgs)

    Hotels.Visible = True
    Bookings.Visible = False

End Sub

因此,上述结果导致了这种效果:

因此,这种相当简单的方法,即隐藏并显示顶部的第一个网格,然后在选择行时显示第二个网格区域,代码非常少。
最终的结果是一个主动的用户界面,一个只需要很少开发人员努力的界面。

相关问题