4

我创建了一个用户控件来从日历中选择日期。我使用 jquery 插件来创建它。我的问题是当我将用户控件放在 aspx 页面上时,它无法正常工作。我的意思是说,如果我放两次而不是只有一个控制工作第二个给我一个错误..那么会有什么问题?

我编写的用于从文件后面的代码注册 jquery 的代码

 string jquery = string.Empty;
    jquery = "window.addEvent('domready', function () { new CalendarEightysix('exampleIII', { 'excludedWeekdays': [0, 6], 'toggler': 'imgClick', 'offsetY': -4 });});   ";


    Page.ClientScript.RegisterStartupScript(typeof(Page), "a key", "<script type=\"text/javascript\">" + jquery + "</script>");

用户控制代码。

<script src="JS/mootools-1.2.4-core.js" type="text/javascript"></script>
<script src="JS/mootools-1.2.4.4-more.js" type="text/javascript"></script>
<script src="JS/calendar.js" type="text/javascript"></script>
<link href="CSS/calendar.css" rel="stylesheet" type="text/css" />

<table cellpadding="0">
  <tr>
    <th>
      <asp:Label ID="lblHeading" runat="server" Text="Date"></asp:Label>
    </th>
    <td>
      <input id="exampleIII" name="dateIII" readonly="readonly" type="text" maxlength="10"
        style="padding-right: 15px;" />
      <img src="Images/calendar.gif" alt="" id="imgClick" />
    </td>
  </tr>
</table>

关于这个的任何想法都请帮助我。提前致谢。

4

3 回答 3

4

您的问题是肯定的,因为您的控件中没有放置动态控件 ID,或者动态 javascript 初始化。如果不更改加载多个用户控件的 ID,那么当您尝试使用 javascript 时就会发生冲突。

要制作动态 ID,您可以使用ClientID同一控件的属性。

在代码上,您需要进行动态更改的要点是,首先您选择作为简单 html 控件的输入,在 ID 的末尾添加 Current UserControl ID,如下所示:

<input id="exampleIII<%=ClientID%>" name="dateIII<%=ClientID%>" readonly="readonly"

和上

<img src="Images/calendar.gif" alt="" id="imgClick<%=ClientID%>" />

然后你将你的javascript更改为:

 string jquery = string.Empty;
    jquery = "window.addEvent('domready', function () { new CalendarEightysix('exampleIII"+ ClientID + "', { 'excludedWeekdays': [0, 6], 'toggler': 'imgClick"+ ClientID + "', 'offsetY': -4 });});   ";

    Page.ClientScript.RegisterStartupScript(typeof(Page), "akey"+ClientID, "<script type=\"text/javascript\">" + jquery + "</script>");

并仅加载您常用的 javascript 库,可能在母版页上,或使用Page.ClientScript.RegisterStartupScript

ps:使用id="exampleIII<%=ClientID%>"来渲染您的控件,因为ClientID仅由他自己就可以使用。因此,您会得到一个包含 ClientID 和 exampleIII 的最终名称。

另一种方法是制作按钮 asp.net 控件,因为使用<%= %>UpdatePanels 时会遇到问题。如果你让它们成为 asp.net 控件,那么你可以ControlName.CliendID在 javascript init 上使用

于 2012-07-09T12:52:31.243 回答
0

当一个页面中包含多个 UserControl 时,客户端出现问题的一个常见原因是使用了具有固定 ID 的 HTML 标记。当您多次包含 UserControl 时,这会导致元素具有重复的 id。

如果没有看到代码,就不可能更精确。

于 2012-07-09T12:46:03.997 回答
0

您不能exampleIII在您的 javascript 代码中使用此 ID。使用文本框而不是输入标签。

在那里你需要使用 asp.net ClientID

更改您的控件如下:

<asp:TextBox ID="exampleIII" runat="server"></asp:TextBox>
<asp:LinkButton ID="imgClick" runat="server"></asp:LinkButton>

像这样的东西:

jquery = "window.addEvent('domready', function () { new CalendarEightysix('" + exampleIII.ClientID + "', { 'excludedWeekdays': [0, 6], 'toggler': '" + imgClick.ClientID + "', 'offsetY': -4 });});   ";


Page.ClientScript.RegisterStartupScript(typeof(Page), "a key", "<script type=\"text/javascript\">" + jquery + "</script>");

参考:客户ID

当 Web 服务器控件呈现为 HTML 元素时,HTML 元素的 id 属性设置为 ClientID 属性的值。ClientID 值通常用于通过 document.getElementById 方法访问客户端脚本中的 HTML 元素。

于 2012-07-09T12:51:35.747 回答