1

我在尝试获取已在 asp.net 中继器中单击的 ID 项的值时遇到问题。我的中继器有一个打开对话框的图像,从打开的对话框中,当我单击 Approve 时,我想在重定向时在 .cs 文件中获取此值,因为 ApproveChange_Click 事件。我没有对要在中继器中检索的 Id 执行任何 DataBinder.Eval。我怎样才能做到这一点?如果我使用会话变量,我可以在哪里设置 .aspx 页面中的值以及如何设置。提前致谢!

这是中继器:

<tr class="<%# Container.ItemIndex % 2 != 0 ? "" : "odd" %>">
     <td class ="approval-img"><a class ="approvalDialog" href='#'><img src="/Images/Approve.png" alt ="Approve"/></td></a>
     <td class ="approval-img"><a class ="declineDialog" href='#'><img src="/Images/Decline.png" alt ="Decline"/></td></a>
     ...
</tr>

这是对话框:

<div id="approval-form" style="display: none; cursor: default">
    <div class="approve-change">
        <ul>
        <li>
            <p><label>Reason</label></p>
            <textarea id="txtReason" runat="server" cols="1" rows="1" class="required"></textarea><br />
        </li>
        <li>
            <span>
            <asp:Button ID="btnApprove" runat="server" CssClass="blue" Text="Approve" ToolTip = "Approve" OnClick="ApproveChange_Click" />
            <button id="btnCancelApprove" class="blue">Cancel</button>
            </span>
        </li>
        </ul>
    </div>
</div>
4

2 回答 2

2

您可以使用按钮的NamingContainer属性来获取RepeaterItem. 但是,如果您“没有对 ID 执行任何 DataBinder.Eval”,则不清楚您将 ID 存储在哪里。

所以我建议使用例如 a HiddenField,用于Eval将 ID 应用于它的Value属性。

在中继器的某处:

<asp:HiddenField ID="HiddenID" runat="server" Value='<%# Eval("ID") %>' />

现在您可以通过以下方式获取它:

protected void ApproveChange_Click(Object sender, EventArgs e)
{
    Button btn = (Button) sender;
    RepeaterItem item = (RepeaterItem)  btn.NamingContainer;
    HiddenField idField = (HiddenField) item.FindControl("HiddenID");
    int ID = int.Parse(idField.Value);
}
于 2012-12-04T16:22:54.387 回答
0

这是我找到的解决方案:首先:更改 ImageButton 中继器中的标签,以便有机会向事件发送命令参数

<td class ="approval-img"><asp:ImageButton runat="server" CommandArgument = '<%# Eval("aux_approvalId")%>'  OnClick="getApprovalID_approve" ToolTip="Approve" ImageUrl="/Images/Approve.png" /></td>

所以,当我被重定向到 OnClick 事件时,我得到了 ID 并在对话框打开后。

ImageButton btn = (ImageButton)(sender);
Session["ApprovalID"] = btn.CommandArgument;
string script = "OpenApprovalDialog();";
Page.ClientScript.RegisterStartupScript(typeof(Page), "", script, true);
于 2012-12-06T16:45:14.300 回答