asp.net - 使用 javascript 为单个 aspage 上的多个实例启用/禁用表

标签 asp.net javascript user-controls

我刚刚发布了一个问题,很快就得到了答复,谢谢。

我有一个新问题,因为我有一个 asp 标签,它在实例期间动态设置其上的文本,然后我有一个与其绑定(bind)的 onmousedown 函数,调用一个 javascript 函数来启用位于其下方的表格区域显示 -默认情况下没有。一切正常,直到我将其中两个用户控件放在页面上。它们都有正确的指定标签文本,但 javascript 启用似乎将第一个用户控件的表的显示样式属性设置为阻止,而不是位于被单击的标签下方的显示样式属性。我确信这是因为脚本在客户端运行(我真的很想保留)并且所有用户控件都具有相同的 id 名称(因为它们都是同一用户控件的实例化),因此要设置的 javascript样式显示属性只获取第一个表。我似乎想不出一个好方法来在安装时动态命名表,以便我可以为 JavaScript 指定这个“唯一”ID 名称或任何其他方式来完成这项工作。

用户控件asp代码如下:

function enableDivArea(objName) {
    document.getElementById(objName).style.display = "block";
}
function disableDivArea(objName) {
    document.getElementById(objName).style.display = "none";
    document.forms[0].submit();
}<asp:Label style="cursor:pointer;color:#EA9156;font-family:Arial,Helvetica,sans-serif;font-weight:bold;" ID="m_emailAddressLabel" onmousedown="enableDivArea('EmailFormDivArea');" runat="server" Text="someone@emailaddress.com"></asp:Label>
<table id="EmailFormDivArea" style="display:none; border-style: outset; border-width: thin">
    <tr>
        <td>To: <asp:Label ID="m_sendEmailToLabel" runat="server" Text=""></asp:Label></td>
        <td align="right"><asp:Label onmousedown="disableDivArea('EmailFormDivArea');" id="m_closeLabel" runat="server" Text="close"></asp:Label></td>
    </tr>
    <tr>
        <td><asp:Label ID="m_fromLabel" runat="server" Text="First Name:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_firstNameBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label1" runat="server" Text="Last Name:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_lastNameBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label2" runat="server" Text="E-mail:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_emailBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label3" runat="server" Text="Phone number:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_phoneNumberBox" runat="server" Visible="True"></asp:TextBox></td>
    </tr>
    <tr>
        <td><asp:Label ID="Label4" runat="server" Text="Message:" Visible="True"></asp:Label></td>
        <td><asp:TextBox ID="m_messageBox" runat="server" Visible="True" Rows="6" TextMode="MultiLine"></asp:TextBox></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><asp:Button ID="m_sendMessageButton" runat="server" Text="Send Message" 
                        onclick="m_sendMessageButton_Click" /></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><asp:Label runat="server" ID="m_statusLabel" Text="" Visible="true"></asp:Label></td>
    </tr>
</table> 

背后的代码如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    m_emailAddressLabel.Text = this.Parameter;
    m_sendEmailToLabel.Text = this.Parameter;

}

最佳答案

让表在服务器上运行,并让用户控件实现 INamingContainer。 构造表的 ID,并在重写的 CreateChildControls 中以编程方式 (HtmlTable) 将其设置为 string.Concat(ID, "table")。

编辑:您还需要在 JavaScript 中动态 ID 引用。 您可以为此使用一些 ,然后在 CreateChildControls 中的代码隐藏中设置它, 但也许内联移动这些小脚本并从代码隐藏中发出脚本会更容易, 在 asp:Label 上设置客户端属性

关于asp.net - 使用 javascript 为单个 aspage 上的多个实例启用/禁用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/466045/

相关文章:

c# - 如何在 C# 中使用 system.drawing 将居中文本绘制到 jpg 上

javascript - typescript 。引用错误 : require is not defined

javascript - 等待 Sequelize 中所有未决的 promise

visual-studio - Visual Studio : Design a UserControl class that derives from an abstract base class

c# - 无法在 MVVM 中完成模式中介

c# - 如何在 DataContext 略有不同的情况下重用 UserControl?

asp.net - 从 Owin WebApi2 返回描述性 401 消息

asp.net - 如何使用 web.config 从 url 中删除 index.aspx?

asp.net - 什么是 ASP.NET 迁移中的鉴别器列?

javascript - 如何使用 Javascript 使用 Chrome for Android 播放声音通知?