0

我很难访问一些动态创建的包含图像、标签和隐藏字段的控件的值。

这就是我正在做的事情:

HTML
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ReportIcon.ascx.cs" Inherits="ReportIcon" %>
<div class="report-icons" style="background:white; color:#014886; border-radius:5px 10px 5px 10px / 10px 5px 10px 5px; width:255px; position:relative; text-align:Left; visibility:visible; padding:5px; margin:5px; overflow: hidden">
    <asp:Image ID="PDFImage" runat="server" ImageUrl="~/Images/pdfIcon.png"/> 
    <div style="position:absolute; left:64px; top:27px; max-width:196px; overflow: auto">              
        <asp:Label ID="ReportNameLabel" style="font-size:12pt; padding-left:15px" runat="server" Text="Report"></asp:Label>
        <br />            
        <asp:HiddenField ID="FilePathHiddenField" runat="server" />
    </div>
</div>

Code Behind
public partial class ReportIcon : System.Web.UI.UserControl
{
    public string reportName { get; set; }
    public string filePath { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        ReportNameLabel.Text = this.reportName;
        FilePathHiddenField.Value = this.filePath;
    }
}

JQuery
function setupMouseEvents() {
    $('.report-icons').hover(
        function () { $(this).css({ 'background': '#B8B8B8' }) },
        function () { $(this).css({'background': 'white' })}
    );

    $('.report-icons').click(
        function () {
            $(this).siblings().removeClass("selected");
            $(this).addClass("selected");
            alert($('#<%=FilePathHiddenField.ClientID%>').val());
        }
    );
};

function init() {
    setupMouseEvents();
};

$(document).ready(function () {
    init();
});

我认为问题在于我的 html 包含在内容占位符中,因为我正在使用母版页。

当我在浏览器中查看 HTML 时,隐藏字段的 ID 为: ContentPlaceHolder1_ReportListView_ctl00_FilePathHiddenField ContentPlaceHolder1_ReportListView_ctl01_FilePathHiddenField ContentPlaceHolder1_ReportListView_ctl02_FilePathHiddenField ContentPlaceHolder1_ReportListView_ctl03_FilePathHiddenField

任何人都知道如何在 jQuery 中访问这些属性?

4

1 回答 1

2

您需要为 jquery 的 id 选择器添加 # 符号

 alert($('#' + '<%=FilePathHiddenField.ClientID%>').val());

或者

 var id = '<%=FilePathHiddenField.ClientID%>';
 alert($('#' + id).val());

对于 Asp.net 4.0

如果您使用的是 Asp.net 4.0 版本,请查看以下内容:ASP.NET 4.0 Client ID Feature

Control.ClientIDMode 属性- 获取或设置用于生成 ClientID 属性值的算法。

AutoID ClientID 值是通过将每个父命名容器的 ID 值与控件的 ID 值连接起来生成的。在呈现控件的多个实例的数据绑定方案中,将在控件的 ID 值前面插入一个递增值。每个段由下划线字符 (_) 分隔。此算法在早于 ASP.NET 4 的 ASP.NET 版本中使用。

静态 ClientID 值设置为 ID 属性的值。如果控件是命名容器,则该控件用作它所包含的任何控件的命名容器层次结构的顶部。

可预测 此算法用于数据绑定控件中的控件。ClientID 值是通过将父命名容器的 ClientID 值与控件的 ID 值连接起来生成的。如果控件是生成多行的数据绑定控件,则在末尾添加 ClientIDRowSuffix 属性中指定的数据字段的值。对于 GridView 控件,可以指定多个数据字段。如果 ClientIDRowSuffix 属性为空,则在末尾添加序号,而不是数据字段值。这个数字从零开始,每行加 1。每个段由下划线字符 (_) 分隔。

Inherit 控件继承其 NamingContainer 控件的 ClientIDMode 设置。

于 2012-05-08T19:14:44.267 回答