Asp.net Dynamic Data之四定義欄位的顯示/編輯模板和自訂驗證邏輯
Asp.net Dynamic data提供了一些欄位模板有比如在Detail View/ListView中顯示用的和在Edit View/Insert View中使用的編輯欄位,同時也可以自訂你所需要的欄位模板。和特殊的顯示格式。
比如:我們需要對日期類型的輸出進行格式化{0:yyyy-mm-dd},對於日期的編輯我需要使用一個編輯控制項供我們選擇;
一些常用的校正比如該欄位是Int型並且編輯時候大小在1-100之間,顯示的時候對不不同的值加於顏色的區別。
比如我們需要對輸入欄位的值進行更嚴格的商務邏輯或是內容相關的關聯的驗證那又要如何?呢。
DEMO1
下面我們來看看如何?這些效果最簡單如何格式化顯示欄位內容,下面是三種不同的顯示格式
代碼
Partial Order 類是LINQ實體中定義的Order;在上面加上MetadataType的特性,下面定義一個MetadataOrder的內容,欄位名需要和Order中定義的一致,然後在欄位上加上顯示格式的特性DisplayFormat(Dataformatstring),當然還支援多種數字類型字元竄類型;從上我們還看到有一個UIHint特性,定義顯示或是編輯時使用的欄位模板,比如UIHint("DevDateTime")使用自己定義的日期欄位模板,Rang(1,100,ErrorMessage)這個就定義簡單的驗證邏輯類似ValidateControl。
DEMO2
自訂欄位模板根據數字顯示不同的顏色
代碼
CustomFieldTemplate.ascx
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="CustomFieldTemplate.ascx.cs"
Inherits="DynamicData_FieldTemplates_CustomFieldTemplate" %>
<asp:Label runat="server" ID="Label1" Text="<%# FieldValueString %>" />
CustomFieldTemplate.ascx.cs
public partial class DynamicData_FieldTemplates_CustomFieldTemplate :
System.Web.DynamicData.FieldTemplateUserControl {
public override Control DataControl {
get {
return Label1;
}
}
protected override void OnDataBinding(EventArgs e)
{
// Read current quantity value.
Int16 currentQty = (Int16)FieldValue;
if (FieldValue != null)
{
// Set quantity warning thresholds.
int min = 30;
int max = 1500;
if (currentQty < min)
{
// Quantity is less than the minimum
// warning threshold.
Label1.ForeColor = System.Drawing.Color.Red;
Label1.Font.Bold = true;
}
else
if (currentQty > max)
{
// Quantity is greater than the maximum
// warning threshold.
Label1.ForeColor = System.Drawing.Color.Blue;
Label1.Font.Bold = true;
}
}
}
}
自訂模板繼承System.Web.DynamicData.FieldTemplateUserControl 具體的我就不多說了這一塊比較簡單
DEMO3
輸入的ShipCity必須是R開頭。
代碼
你可以針對每個欄位進行驗證 ,這裡要注意的是VaildationException而不是Exception;
另外你也可以根據不同操作區定義你的驗證方式,比如Insert,Update,Delete