2012-07-09 72 views
4

我已經創建了一個用戶控件來從日曆中選擇日期。我用jquery插件來創建它。我的問題是,當我把用戶控制在aspx頁面上工作不正常。我的意思是說,如果我把兩次比只有一個控制工作第二個給我一個錯誤..所以會有什麼問題?我已經寫入到從碼寄存器的jquery隱藏文件如何在同一個網頁上多次使用web usercontrol?

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> 

有關這個的任何想法比請幫助我。 在此先感謝。

+3

你需要給我們更多的工作,有很多可能的原因,爲什麼它不工作。向我們展示一些代碼 – freefaller 2012-07-09 12:41:53

+0

我準備打賭你正在使用錯誤的jquery選擇器(可能是id)來顯示該日曆。 – nunespascal 2012-07-09 12:46:22

+0

@freefaller:看到我的問題..我已經更新了它.. – user968441 2012-07-09 12:46:44

回答

4

您的問題是肯定的,因爲您沒有在您的控件中放置動態控件ID,或動態JavaScript初始化。如果您在多個用戶控件加載中更改了ID,那麼當您嘗試使用JavaScript時會發生衝突。

要製作動態ID,您可以使用同一控件的ClientID屬性。

上的代碼,你需要做動態變化的點是,所有的輸入的第一個,你選擇是簡單的HTML控件,添加在您的ID當前用戶控件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初始化使用

+0

日期選擇器打開兩次,而我把代碼像你的 – user968441 2012-07-09 13:06:16

+0

@ user968441這是想法,我不調試你的代碼,看到這個細節...看看是什麼呈現,是在兩個文本編輯器中打開? – Aristos 2012-07-09 13:08:26

+0

@ user968441也會更改名稱ID。 – Aristos 2012-07-09 13:11:50

0

當一個頁面中包含多個UserControl時,客戶端問題的一個常見原因是使用帶有固定ID的HTML標記。這會導致包含重複id的元素多次包含UserControl時。

沒有看到代碼就不可能更精確。

0

你不能在你的javascript代碼中使用這個ID exampleIII。使用文本框而不是輸入標籤。

在那裏你需要使用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>"); 

參見:ClientID

當Web服務器控件呈現爲一個HTML元素時,將HTML元素的id 屬性設置爲ClientID的值財產。 ClientID值通常用於通過使用document.getElementById方法訪問客戶端腳本中的HTML元素 。

+0

我的不好。糾正。 – nunespascal 2012-07-09 13:03:15

相關問題