2010-06-07 82 views
1

我在我的內容頁面中有一個表單,我正在通過Javascript進行一些客戶端驗證。如果將JS代碼直接放在內容頁面中,則Javascript的行爲與預期相同。但是,如果我將JS代碼放在它自己的文件中,並嘗試從內容/母版頁(通過腳本標記的src屬性)訪問它,當JS中的驗證函數被調用時,會出現運行時錯誤。通過Javascript訪問asp.net內容頁面中的控件

具體來說,我得到了下面的錯誤。 微軟JScript運行時錯誤:反對預期/在此線所需 - 的document.getElementById( '<%= txtemailId.ClientID%>')值

txtemailId是在內容頁。

Javascript代碼被放置在validation.js中並通過母版頁訪問。

我猜的原因是,當.NET被解析的文件,它是無法與將在以後生成的客戶端值代替txtemailId.ClientID。那麼,應該如何去做呢?謝謝!

+0

只需在頁面標籤中包含ClientIDMode =「Static」,您就可以使用與舊版本相同的JavaScript。這已經包含在.net 4.0中。 – roshan 2014-01-28 07:12:30

回答

1

答案很簡單。

在您的內容頁聲明在線JScript中的變量,確保這是你的標籤上面。

<script> 
    var emailClientId = &lt;%=txtemailId.ClientID%&gt;; 
</script> 

在您include.js文件使用的全局範圍emailClientId變量。

很明顯,這有點笨拙,因爲並不是所有的JScript代碼都包含在include.js文件中,這使得調試/診斷變得很困難,因爲它沒有明確地明確值的來源。您應該在代碼中清楚地評論/記錄這些內容,以便將來更輕鬆地維護他的代碼庫。

0

獨立.js文件不通過ASPX解析器運行,所以你的表達不被評估。

爲了解決這個問題,你可以設置在ASPX文件全局變量(或函數的參數,或者別的什麼)與對照的ID,然後在獨立的.js文件中使用它們。

或者,你可以使用類名(不得到錯位),而不是標識。 (這是使用非常簡單的jQuery)

0

像這樣的方法是最適合你想要的東西來實現:

validation.js

var Validation = { 
    EmailId: null, 

    Validate: function() { 
      var email = document.getElementById(EmailId).value; 
    } 
} 

page.aspx

Validation.EmailId = '<%=txtemailId.ClientID %>'; //initialize 
Validation.Validate(); //whenever you want to validate 
1

你說得對,代碼<%=txtemailId.ClientID %>只會被替換w^ith如果此代碼位於ASP.Net文件中,則由ASP.Net提供的真實客戶端ID。所以如果你把這個javascript放在一個獨立的.js文件中,ASP.Net將一無所知,代碼將不會被解析。

實現此目的的最簡單方法是創建函數的控件ID參數。這樣,您可以在.aspx(或.ascx)文件中使用調用JavaScript代碼以及<%=txtemailId.ClientID %>代碼。

相關問題