在這一節中,我們將為大家介紹Ajax新元件的Validate功能,在Validate功能中我們提供了四種檢核模式:1.NotNull; 2.內建方式(即作基本的數值類型檢測、Mail格式檢測等); 3.JavaScript方式檢測 4. ServerMethod方式檢測。在下面的例子裏我們使用bFormViewbOrders,為大家介紹這幾個檢核功能。
AjaxGridView的Validate方式
① NotNull功能—檢測Detail的單價以及數量是否為空
首先,我們回到bFormViewbOrders上,找到agvDetail右擊滑鼠選擇屬性。在它的Columns屬性右側找到按鈕,點開後我們找到colUnitPrice以及colQuantity將它的AllowNull設定為False,表示這個欄位不允許為空。
設定完成後,我們點擊確定並選擇保存按鈕。現在我們一起來瀏覽一下效果。通過InfoLogin.aspx登入,我們打開“AjaxFromView訂單管理 ”這個Menu。在打開畫面中我們新增一個明細,輸入產品編號後,點擊保存按鈕,此時若檢測不成功系統會自動Focus在第一個檢測未成功的欄位上,同時當滑鼠移動到該欄位時,系統出現提示語
② 內建檢測功能--檢測Detail的單價為浮點數(Float)以及數量為整數(int)
同樣,我們回到bFormViewbOrders上,找到agvDetail右擊滑鼠選擇屬性。在它的Columns屬性右側找到按鈕,點開後我們找到colUnitPrice將它的ValidType設定為Float以及colQuantity將它的ValidType設定為Int。ValidType屬性是專門用來設定欄位元元的檢測方式的。它共分為9中模式。None表示不檢測;Method表示通過方法的模式進行檢測,在使用該模式時,需要配合Validate Method,在下面的③和④的步驟進行說明;Alpha表示只可輸入字母;AlphaNumber表示只可以輸入字母和數字;Email表示檢測是否為正確的Mail格式;Url表示檢測是否為正確的Url位址格式;Int表示檢測是否輸入的是整數;Float表示檢測是否輸入的為浮點數;IPAddress表示是否輸入正確的IP位址。
最後,同樣,我們登陸InfoLogin.aspx,在“AjaxFromView訂單管理 ”中輸入一筆明細。當我們在單價的欄位上設定一個字元時,系統自動會出現紅色的波浪線,當我們將滑鼠移動到該欄位時,系統將顯示提示語
③ JavaScript--檢測Detail的單價為數字
這裡我們使用JS的方法自己來對單價進行數字格式的檢測,為了配合JS方法的數字格式檢測,我們需要將ValidType修改為Method。同時,在ValidMethod上輸入JS的方法名稱。這裡的方法名稱同Default一樣不需要加上小括號。
設定完成後,我們點擊保存按鈕,接下來我們需要在中,加入JS
的方法。由於在Default的功能中我們已經寫過一個JS的方法了,因此我們將checkNumber的方法寫在Default方法的下方。如下圖:
最後,我們將已經完成的程式存檔,一起來瀏覽產生的效果如下圖:
④ ServerMethod方式--檢測Detail選擇的產品是否有庫存
在此處的檢測我們需要根據選擇的產品編號,以及訂單的訂料數量,然後回到後端檢測是否有充足的庫存。為此我們需要通過ServerMethod的方法來進行合法性的檢測功能,設定如下,我們同樣在agvDetail的Columns屬性裡找到colQuantity欄位。將它的檢測方式(ValidType)設定為Methods、ValidMethod設定為sOrders. checkStock 、ValidateText為“庫存不足,請補貨後再訂料”。 其中,ValidateText的屬性用來配合ServerMethod的方式的合法性檢測的。
接下來,我們就需要在sOrders這個Server端加入如下圖中的程式內容。其中方法的回傳類型需要設定為object[],其中第一個值為0,第二個參數為回傳得true或者false,表示檢測是否成功。其中方法默認傳入參數為object[]類型,object[0]為合法性檢測的欄位輸入值,object[1]為合法性檢測的欄位所在的HashTable。本個例子方法內容如下圖:請注意,該內容需要寫在public class component裏
/// <summary>
/// 檢測該產品是否有足夠的庫存提供訂料數量
/// </summary>
/// <param name="objParam">objParam[0]為合法性檢測欄位輸入值,objParam[1]為合法性檢測所在HashTable</param>
/// <returns>object[0]為固定格式,objcet[1]為true表示檢測成功,否則 檢測失敗 </returns>
public object[] checkStock(object[] objParam)
{
SqlConnection connection = (SqlConnection)AllocateConnection(this.GetClientInfo(ClientInfoType.LoginDB).ToString());
SqlCommand command = new SqlCommand();
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
int quantity = (string.IsNullOrEmpty(objParam[0].ToString()) ? 0 : Convert.ToInt32(objParam[0].ToString())); //合法性檢測欄位
System.Collections.Hashtable hashTable = (System.Collections.Hashtable)objParam[1]; //合法性檢測所在行
int productId = (int)hashTable["ProductID"];
string sql = "select ProductID from products where UnitsInStock - " + quantity + " < 0 and ProductID = '" + productId.ToString() + "'";
command.CommandText = sql;
command.Connection = connection;
SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
if (connection != null)
{
connection.Close();
ReleaseConnection(this.GetClientInfo(ClientInfoType.LoginDB).ToString(), connection);
}
if (ds.Tables[0].Rows.Count > 0)
{
return new object[] { 0, false };
}
return new object[] { 0, true };
}
添加了方法後,我們需要在Server的serviceManager上添加一個Service。首先選中serviceManager,找到ServiceCollection這個屬性,點開右側的按鈕。在集合編輯器中添加一個Service。將DelegateName和ServiceName都設定為checkStock。設定完成後,請重新建制(build) sOrders這支程式。最後,重新啓動一下EEPNetServer。
最後,我們輸入庫存數只有6個的17號產品,我們將數量設定為9,此時點選保存按鈕時,系統會提報程式中設定的提示語句。
Ø AjaxFormView的Validate方式
① NotNull功能—檢測Master的客戶編號是否為空
首先,我們回到bFormViewbOrders上,找到AjaxFromView1右擊滑鼠選擇屬性。在它的Feilds屬性右側找到按鈕,點開後我們找到ctrlCustomerID將它的AllowNull設定為False,表示這個欄位不允許為空。
設定完成後,我們點擊確定並選擇保存按鈕。現在我們一起來瀏覽一下效果。通過InfoLogin.aspx登入,我們打開“AjaxFromView訂單管理 ”這個Menu。在打開畫面中我們新增一個訂單,在沒有輸入客戶編號的情況下,點擊確定按鈕,此時若檢測不成功系統會自動出現提示框,同時,在有問題的欄位下以紅色波浪線的形式進行顯示。
② 內建檢測功能--檢測運費為浮點數(Float)並修改提示語
同樣,我們回到bFormViewbOrders上,找到AjaxFormView1右擊滑鼠選擇屬性。在它的Feilds屬性右側找到按鈕,點開後我們找到ctrlFreight將它的ValidType設定為Float。在前面的gridView功能中我們介紹過ValidType在使用Method時,我們通過ServerMethod來檢測,那麼可以通過ValidText修改提示語。同樣,在通過ValidType為Float、Int等形式檢測時,我們同樣可以使用這個功能來完成個性化資訊的顯示。請注意,只有在使用JS的檢測方式時,我們通過檢測的程式直接回傳提示語句。不使用該屬性。
最後,同樣,我們登陸InfoLogin.aspx,在“AjaxFromView訂單管理 ”中輸入一筆。當我們在運費的欄位上設定一個字元時,系統自動會出現紅色的波浪線,當我們將滑鼠移動到該欄位時,系統將顯示提示語
③ JavaScript--檢測運費為數字
同AjaxGridView的例子,我們通過現有的JS的方法來對運費為數字格式的檢測,為了配合JS方法的數字格式檢測,我們需要將ValidType修改為Method。同時,在ValidMethod上輸入JS的方法名稱。
設定完成後,我們點擊保存按鈕。最後,我們將已經完成的程式存檔,一起來瀏覽產生的效果如下圖:
④ ServerMethod方式--檢測出貨日期應大於等於訂單日期
為此功能我們需要通過ServerMethod的方法來進行合法性的檢測功能,設定如下,我們同樣在AjaxFromView的Fields屬性裡找到ctrlShippedDate欄位。將它的檢測方式(ValidType)設定為Methods、ValidMethod設定為sOrders. checkDate 、ValidateText為“出貨日期應大於等於訂單日期”。
接下來,我們就需要在sOrders這個Server端加入如下圖中的程式內容。
/// <summary>
/// 檢測出貨日期應大於等於訂單日期
/// </summary>
/// <param name="objParam">objParam[0]為合法性檢測欄位輸入值,objParam[1]為合法性檢測所在HashTable</param>
/// <returns>object[0]為固定格式,objcet[1]為true表示檢測成功,否則檢測失敗</returns>
public object[] checkDate(object[] objParam)
{
DateTime shippedDate = new DateTime();
if (!string.IsNullOrEmpty(objParam[0].ToString()))
shippedDate = Convert.ToDateTime(objParam[0].ToString()); //合法性檢測欄位
System.Collections.Hashtable hashTable = (System.Collections.Hashtable)objParam[1]; //合法性檢測所在行
DateTime orderDate = Convert.ToDateTime(hashTable["OrderDate"]);
if (shippedDate.Year != 1 && shippedDate.Date.CompareTo(orderDate.Date) < 0)
{
return new object[] { 0, false };
}
return new object[] { 0, true };
}
添加了方法後,我們需要在Server的serviceManager上添加一個Service。將DelegateName和ServiceName都設定為checkDate。設定完成後,請重新建制(build) sOrders這支程式。最後,重新啓動一下EEPNetServer。現在一起來新增一筆Master,同時將出貨日期修改為小於訂單日期,點擊存檔後,結果如下:
Converted from CHM to HTML with chm2web Pro 2.85 (unicode) |