是否有.net中的Javascript函数.closest()?

时间:2015-09-29 13:04:32

标签: c# asp.net .net html-table repeater

我正在使用的网站上的表格是由转发器创建的,因此我不知道如何在生成页面后识别它们。我需要能够根据该行中单元格的按钮单击选择一行。

有一个Javascript函数可以做到这一点,但我想在.net(C#)中复制;

currentRow = $(evt).closest("tr");

表格是这样生成的; (包含“隐藏”按钮的最后一列)

<asp:Repeater ID="StoredProcedureRepeater" runat="server">

                    <ItemTemplate>

                        <tr ID="HideMe" class="NotHidden" runat="Server">
                            <td style="width: 300px" runat="server">
                                <asp:HyperLink runat="server" Text='<%# StoredProcedure.Caption %>' NavigateUrl='<%# Url.StoredProcedure(StoredProcedure) %>' />
                            </td>
                            <td runat="server">
                                <%# StoredProcedure.Description %>
                            </td>
                            <td runat="server">
                                <asp:HyperLink ID="EditProcedure" runat="server" Text='edit' NavigateUrl='<%# Url.EditProcedure(StoredProcedure) %>' />
                            </td>
                            <td id="HideBtn">
                                <asp:button ID="HideUnhide" runat="server" image="../images/collapse.png"  onclick="Hide_Unhide"/>
                            </td>
                        </tr>

                    </ItemTemplate>

                </asp:Repeater>

转发器的代码背后; (所以为了清楚起见,这个中继器是在另一个内部创建的。)

private void SchemaRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        Schema = (Schema)e.Item.DataItem;

        var storedProcedureRepeater = (Repeater)e.Item.FindControl("StoredProcedureRepeater");

        storedProcedureRepeater.ItemCreated += StoredProcedureRepeater_ItemCreated;
        storedProcedureRepeater.DataSource = _schemaStoredProcedures[Schema];
        storedProcedureRepeater.DataBind();
    } 
 private void PriorityProcedureRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        StoredProcedure = (StoredProcedure)e.Item.DataItem;
    }

1 个答案:

答案 0 :(得分:0)

既然您说要在C#中复制它,我认为您的意思是要在服务器端执行此操作。

首先,您需要在标记中为RepeaterItemCommand指定一个事件处理程序。

<asp:Repeater runat="server" OnItemCommand="MyRepeater_ItemCommand" ... />

然后在您的代码隐藏中,您定义事件处理程序。

protected void MyRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
}

RepeaterCommandEventArgs包含有关导致事件的行的信息,包括用于构建行的数据项。如果您从List构建了转发器,那么您的事件处理程序将如下所示:

protected void MyRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
    var dataItem = (Widget)e.Item.DataItem; // <-- this is the dataitem for the row
    int dateItemID = dataItem.ID; // You can access the properties on your data item to "do stuff"
}