利用javascript獲取Asp.net網頁控件並檢驗網頁輸入的簡單辦法

利用javascript獲取Asp.net網頁控件並檢驗網頁輸入的簡單辦法(從服務器獲取客戶端ID)收藏
今天十分想通過javascript檢驗asp.net輸入合法性,採用原來在Form年代的辦法document.getElementById("textBox").value就會報錯,而且document.getElementById("textBox")獲取的是Null,說明這個辦法在.net中採取WebForms時獲取不到控件id,找了很長時間材料,終於知道所以和解決辦法。

原因所在:

據個例子,一個TextBox控件,在服務器端的ID是txtUserName,但是最終在客戶端生成的ID可能是LoginForm_txtUserName,因爲它被放在一個ID爲LoginForm的NamingContainer中。爲了使組件內部的服務器控件最終生成的客戶端ID能夠在頁面上唯一,WebForms引入了NamingContainer這個概念。在NamingContainer中的服務器端控件最終在客戶端生成的ID,會使用NamingContainer的“客戶端ID”作爲前綴。如此“遞歸”的做法保證了服務器控件在客戶端的ID唯一。
  
  Web 2.0在業界風捲殘雲般的勢頭至今還未停歇,與其有密切相關的AJAX技術也被廣泛使用。AJAX技術從根本上講,是一種在瀏覽器中使用JavaScript實現的技術,因此使用JavaScript操作DOM元素的情況非常多見。在非WebForms的頁面中我們可以編寫如下的代碼:
  
<input type="text" id="textBox" />
  
<script language="javascript" type="text/javascript">
   document.getElementById("textBox").value = "Hello World!";
</script>
  
  但是由於NamingContainer的緣故,我們在使用WebForms的服務器端的控件時就可能無法通過textBox在客戶端獲得文本框(生成的<input />元素)。爲了解決這個問題,服務器端的控件模型提供了一個ClientID屬性,通過這個屬性,我們就可以在服務器端得到控件最終在客戶端的ID。例如,如果上面的代碼放在一個用戶控件裏的話,就一定必須寫成如下形式:
  
<%@ Control Language="C#" AutoEventWireup="true" %>
  
<asp:TextBox runat="server" ID="textBox" />
  
<script language="javascript" type="text/javascript">
   document.getElementById("<%= this.textBox.ClientID %>").value = "Hello World!";
</script>
  
  此時,當控件被放到頁面上之後,它在客戶端生成的代碼則會是:
  
<input name="DemoControl1$textBox" type="text" id="DemoControl1_textBox" />
  
<script language="javascript" type="text/javascript">
   document.getElementById("DemoControl1_textBox").value = "Hello World"!;
</script>
  
  請注意<input />元素的name和id,它們都留下了NamingContainer的痕跡。由於我們在頁面上使用了<%= %>標記直接輸出了服務器控件的ID,這樣在客戶端的JavaScript代碼也就可以正確訪問到服務器端<asp:TextBox />對應的客戶端<input />元素了。

檢驗錄入解決辦法:

實例代碼如下:
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<script language="javascript" type="text/javascript">
function CheckSchEnter()
{
    var obj=document.getElementById("<%=this.tValue.ClientID%>");
    if(obj.value==""){
    alert("請輸入查詢關鍵字");
    obj.focus();
    return false;
    }
    else{
    return true;
    }
}
</script>
<form id="form1" runat="server">
<div>
搜索:關鍵字<asp:TextBox ID="tValue" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Height="25px" Text="搜索" OnClientClick="return CheckSchEnter()" οnclick="btnSearch_Click" />
<div>
</form>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章