2012-06-28 45 views
1
foreach (Control ctrl in Page.Controls) 
    { 
     if (ctrl is TextBox) 
     { 
      if (((TextBox)(ctrl)).Text == "") 
      { 
       helpCalss.MessageBox("Please fill the empty fields", this); 
        return; 
      } 
     } 
    } 

我使用asp.net和我有texboxes的插入頁面,我需要檢查,如果在頁面中texboxes是空的,如果是的話我需要顯示一個消息框,空文本框中如何使用循環掃描ASP .NET頁面中的所有控件?

+2

嘗試使用「驗證」控件(客戶端和服務器端)或JavaScript(jQuery)來驗證用戶輸入。 – adatapost

+0

你沒有顯示任何實際的消息框是你嗎?這會在部署時造成各種問題。 –

+0

相關:http://stackoverflow.com/questions/4955769/better-way-to-find-control-in-asp-net – jrummell

回答

0

這裏是a good article on it,但下面是一個修改版本,由給定的屬性收集控制

public List<Control> ListControlCollections(Page page, string propertyName) 
{ 
    List<Control> controlList = new List<Control>(); 
    AddControls(page.Form.Controls, controlList, propertyName); 
    return controlList; 
} 

private void AddControls(ControlCollection controlCollection, List<Control> controlList, string propertyName) 
{ 
    foreach (Control c in controlCollection) { 
     PropertyInfo propertyToFind = c.GetType().GetProperty(propertyName); 

     if (propertyToFind != null) { 
      controlList.Add(c); 
     } 

     if (c.HasControls()) { 
      AddControls(c.Controls, controlList, propertyName); 
     } 
    } 
} 

要使用它:

List<Control> controlList = ListControlCollections("Text"); 
for (i=0; i < controlList.length; i++) 
{ 
    if (controlList[i].Text == string.empty) 
    { 
     // Do your logic here 
    } 
    else 
    { 
     // Do your logic here 
    } 
} 
+1

@AVD我已經嘗試使用JavaScript,但問題是,我有一個母版頁和內容頁,所以ID是不同的,JavaScript代碼不工作,當我用clientid proerty –

+0

我需要循環頁面中的所有控件,如果它的類型是文本框,我需要檢查它是否爲空,如果它是空的消息框應該出現與空文本框和回滾將文本放在空的 –

+0

謝謝你的代碼,但它將如何幫助我在這個問題? –

0

我想你可以試試這個遞歸函數來獲取頁面上的所有文本框。

/// <summary> 
    /// Find TextBoxes Recursively in the User control's control collection 
    /// </summary> 
    /// <param name="controls"></param> 
    /// <param name="type"></param> 
    /// <returns></returns> 
    private void FindControlRecursiveByType(ControlCollection controls, ref List<TextBox> OutputList) 
    { 
     foreach (WebControl control in controls.OfType<WebControl>()) 
     { 
      if (control is TextBox) 
       OutputList.Add(control as TextBox); 
      if (control.Controls.Count > 0) 
       FindControlRecursiveByType(control.Controls, ref OutputList); 
     } 
    } 

OutputList將包含所有的文本框,然後你可以檢查它們的空條件

0

你的做法是錯誤的,因爲人指出 - 除非你是動態添加控件的頁面,那麼你應該通過驗證器進行驗證。

下面是如何反正做一個片段:

private void SearchControls(Control controlSearch) 
{ 
    foreach (Control control in controlSearch.Controls) 
    { 
     if (control != null) 
     { 
      if (control.Controls != null & control.Controls.Count > 0) 
      { 
       SearchControls(control, form); 
      } 

      TextBox textbox = control as TextBox; 
      if (textbox != null && string.IsNullOrEmpty(textbox.Text)) 
      { 

      } 
     } 
    } 
} 

使用SearchControls(this)在頁面開始搜索。