2011-11-18 77 views
2

我有一個稱爲MyControl的用戶控件。ASP.Net用戶控件衝突JQuery函數

它在頁面中使用了3次。所以,頁面上有3個控件。

我寫在控制jQuery函數,其使用ServerControl如

function MyFunction(myName) { 
    //some Ajax Call 

    $("#<%= MyTextBox1.ClientID").val(DataFromAjax); 
} 

的問題是在頁面3個JQuery的函數「MyFunction的」,它是相混淆。如果我只在頁面上使用1個控件,我的代碼就可以成功運行。但如果它不止一個,這個功能就會與其他人發生衝突。

我無法將功能從用戶控件移動到頁面,因爲它引用了控件中的某些服務器端控件。

您能否給我建議?謝謝大家。

這是我的JQuery函數。

function GetData(ADUser) { 

     $.ajax({ 
      url: "/Health/Health.asmx/GetPersonData", 
      data: "{ 'samAccount': '" + ADUser + "' }", 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       var user = data.d; 

       if (user != null) { 

        $("#cphContent_PersonalDetail1_txtFirstName").val(user.FirstName); 
        $("#cphContent_PersonalDetail1_txtLastName").val(user.LastName); 
        $("#cphContent_PersonalDetail1_txtTelephone").val(user.Telephone); 
        $("#cphContent_PersonalDetail1_txtEmail").val(user.Email); 
       } 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
      } 
     }); 

    } 

這就是我如何將它綁定到HyperLink控件。

if (!IsPostBack) 
     { 
      hlFill.Attributes.Add("onclick", string.Format("GetData('{0}'); return false;", GlobalSettings.UserADAccount)); 
} 
+0

你是怎麼調用這個函數的? –

+0

你能發佈你的3個控件輸出的HTML嗎?從它的聲音來看,每個控件都有相同的ID,這就是爲什麼你有這個問題。 –

回答

2

當你調用「MyFunction的」什麼是你希望達到什麼目的?我的意思是,您正在試圖調用它,以便您在頁面上的三個控件中的每個JavaScript函數都同時執行,以便從Ajax回調中將值填充到每個控件中。

或者你是否試圖根據某些約束在每個控件中調用特定的函數?

每種情況下都有不同的答案。例如,在第一種情況下,這是純粹的理論,但是當你聲明的MyFunction你能不斷地建立單一的功能,例如:

if(MyFunction != null) 
{ 
    var oldFunction = MyFunction; 
    MyFunction = new function(){ //new code here; oldFunction(); } 

} 
else 
{ 
    //Create it as you were but assign it to MyFunctino 
} 

如果您要基於特定的約束來相互調用MyFunction的是後者,有無論如何你可以,例如採取Asp的控制編號,並將其追加到函數名稱,所以你創建一個獨特的功能,但然後我不確定如何調用它,所以這可能會或可能不會幫助。

編輯:

我瞭解多了一些關於你的問題了。我現在假設你點擊三個控件中的哪一個,它總是執行它找到的第一個控件,因此它只是將數據重新加載到第一個控件中?

你的問題的關鍵是雙重的:

  • 有功能沒有區別命名控制輸出到頁面。
  • 該控件值你的設置在你的函數成功的ajax回調我假設參考頁面上多個HTML控件?

從你發佈的JQuery函數中,我看不到到底爲什麼你需要把它粘貼到控件每次,因爲我沒有看到任何服務器端變量輸出?

我的建議是在所有控件使用的父頁面中創建一個函數。你明確聲明你不能由於服務器端變量,但如果是這種情況,那麼修改你的GetData()函數以獲取更多參數,以便它們定義它應該運行的上下文而不是從它輸出的控制從。

可能將controlid作爲參數傳遞給jquery函數,以及它可以用作另一個選擇器來查找相關的html控件以在回調中填充值。

多次輸出一個函數應該引發一個問題「我是否正確地做對了?」而不是「我怎麼能讓這個工作?」。

+0

很好解釋。 你是對的!我正在關注「我怎樣才能讓這個工作?」而不是「我做對了嗎?」。你向我展示了更好更正確的方式。非常感謝。 – TTCG

0

爲什麼不只是添加一個參數來定義函數的調用方式?

0

如果你絕對不能動的功能,那是這樣的:

if (!MyFunction) { 
    MyFunction = function(myName) { 
     //some Ajax Call 

     $("#<%= MyTextBox1.ClientID").val(DataFromAjax); 
    } 
} 
0

你如何將腳本添加到你的控件?我會推薦使用ClientScriptManager.RegisterClientScriptBlock()。您可以提供一個腳本鍵,使其僅添加到您的頁面一次。

// Get a ClientScriptManager reference from the Page class. 
ClientScriptManager cs = Page.ClientScript; 

// Check to see if the startup script is already registered. 
if (!cs.IsStartupScriptRegistered(cstype, csname1)) 
{ 
    String cstext1 = "alert('Hello World');"; 
    cs.RegisterStartupScript(cstype, csname1, cstext1, true); 
}