[研究][ASP.NET]檢查FormView1中所有TextBox輸入資料長度
2021-01-14
2021-01-15更新
Visual Studio 2019 + ASP.NET + WebForm + C#
因為有上百個 TextBox 要檢查,所以逐個 FindControl 取出檢測太累。
protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) { // 檢查所有 TextBox 是否內容長度超過 255,避免 SQL Server 吐 Error string errMsg = CheckAllTextBoxeLength(FormView1); if (errMsg != "") { e.Cancel = true; Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>"); } } private string CheckAllTextBoxeLength(Control parent) { string errMsg = ""; foreach (Control c in parent.Controls) { if (c.GetType().ToString() == "System.Web.UI.WebControls.TextBox") { TextBox tbox = c as TextBox; if (tbox != null) { if (tbox.Text.Length >= 255) { errMsg = errMsg + "「" + tbox.Text + "」填寫內容長度超過255字元。"; } } } if (c.Controls.Count > 0) { errMsg = errMsg + CheckAllTextBoxeLength(c); } } return errMsg; } |
********************************************************************************
2021-01-15 更新,更簡潔做法
protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) { // 檢查所有 TextBox 是否內容長度超過 255,避免 SQL Server 吐 Error // 字串或二進位資料會被截斷。陳述式已經結束。 string errMsg = ""; for (int i = 0; i < e.NewValues.Count ; i++) { if (e.NewValues[i] != null) { if (e.NewValues[i].ToString().Length >= 255) { errMsg = "「" + e.NewValues[i].ToString() + "」內容超過 255 字元。"; break; } } } if (errMsg != "") { e.Cancel = true; Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>"); } } |
再省時間,略過 RadioButton 和 CheckBox 不要查
protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) { // 檢查所有 TextBox 是否內容長度超過 255,避免 SQL Server 吐 Error // 字串或二進位資料會被截斷。陳述式已經結束。 string errMsg = ""; for (int i = 0; i < e.NewValues.Count ; i++) { if (e.NewValues[i] != null) { // 只要是 TextBox 輸入的都是 String,RadioButton 和 CheckBox 輸入的是 Boolean // if (e.NewValues[i].GetType().FullName == "System.String") if (e.NewValues[i].GetType().Name == "String") { if (e.NewValues[i].ToString().Length >= 255) { errMsg = "「" + e.NewValues[i].ToString() + "」內容超過 255 字元。"; break; } } } } if (errMsg != "") { e.Cancel = true; Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>"); } } |
再精簡
// 暫存,基本檢查 // 檢查所有 TextBox 是否內容長度超過 255,避免 SQL Server 吐 Error // 字串或二進位資料會被截斷。陳述式已經結束。 foreach (System.Collections.DictionaryEntry entry in e.NewValues) { var k = entry.Key; var v = entry.Value; // TextBox 就算沒填寫,也是 "",不會 null;RadioButton 或 CheckBox 是 true 或 false; if (v.ToString().Length >= 255) { errMsg = "「" + v.ToString() + "」內容超過 255 字元。"; break; } } |
再強化。
protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e) { string errMsg = ""; // 暫存,基本檢查 // 檢查所有 TextBox 是否內容長度超過 255,避免 SQL Server 吐 Error // 字串或二進位資料會被截斷。陳述式已經結束。 foreach (System.Collections.DictionaryEntry entry in e.NewValues) { var k = entry.Key; var v = entry.Value; // TextBox 就算沒填寫,也是 "",不會 null;RadioButton 或 CheckBox 是 true 或 false; if (v.ToString().Length >= 255) { errMsg = "「" + v.ToString() + "」內容超過 255 字元。"; break; } // 敝人輸入數字用的 TextBox,SQL Server 資料庫欄位取名都包含 Int ,Bind() 的名稱包含 Int 字串 if (k.ToString().Contains("Int")) { bool convertOK = Int32.TryParse(v.ToString(), out int vInt); if (convertOK == false) { errMsg = "「" + v.ToString() + "」轉換失敗,應該輸入整數數字。"; } if (v.ToString() != vInt.ToString()) { errMsg = "「" + v.ToString() + "」應該輸入整數數字。"; } } } if (errMsg != "") { e.Cancel = true; Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>"); } } |
(完)
沒有留言:
張貼留言