我已經通過谷歌搜索,發現很多人都在努力解決這個問題,但我仍然沒有找到正確的答案。自定義驗證程序在FormView中工作嗎?
http://i.stack.imgur.com/15jen.png
我有一個表格視圖,需要檢查,如果語言代碼重複與否,必須檢查服務器端腳本,因爲它需要的是通過數據庫查詢。
更新於2011年5月4日,19.32 //我在此添加表單視圖的屬性,所以有人可能會指出是否有任何問題。
<asp:FormView ID="fmvxLanguage" runat="server" EnableViewState="False" DefaultMode="Insert"
Visible="False" Width="95%" DataSourceID="odsLanguage" DataKeyNames="LanguageCode"
CssClass="formViewAdd">
//
<dxe:ASPxButton ID="btnAddNewLanguage" runat="server" CausesValidation="True"
Image-Url="~/images/icon/Save-icon.png" CommandName="Insert" Text="Save">
</dxe:ASPxButton>
我使用INSERT命令插入按鈕,導致驗證設置爲true。
<asp:CustomValidator ID="cvdLanguageCodeNameDuplicate" runat="server"
ControlToValidate="txtLanguageCode" CssClass="IconValidation"
ErrorMessage="<img src="/images/icon/validation-Icon.png"/> Language code name is duplicated."
onservervalidate="cvdLanguageCodeNameDuplicate_ServerValidate"> </asp:CustomValidator>
自定義驗證設置如上
當我按一下按鈕,並嘗試將在事件的ServerValidate斷點,我甚至沒有到達那裏
protected void cvdLanguageCodeNameDuplicate_ServerValidate(object source, ServerValidateEventArgs args)
{
if (LanguageHelper.HaveLanguageCode(args.Value))
{
args.IsValid = false;
}
}
至於現在,我使用標籤,而不是自定義驗證程序通過檢查值是否有效FormView_ItemInserting,如果該值無效我只是使用e.Cancel(FormViewInsertEventArgs)並使標籤可見。但仍然,我想知道如果自定義驗證程序不在formview上工作,或者我做錯了什麼。
謝謝。
以下代碼與問題無關,但對搜索此主題的用戶可能會有所幫助,並且可能會有相同的問題。我不得不重複這個有很多的時間,所以我做重用類爲這個事件(使用標籤作爲驗證)
public class clsFormViewDuplicationValidationSetter
{
#region Property
public FormView FormView { get; set; }
public delegate bool DelDuplicationValidationNameOnly(string pStrName);
public delegate bool DelDuplicationValidationNameAndId(string pStrName, int primaryId);
public DelDuplicationValidationNameOnly DuplicationValidationNameOnly;
public DelDuplicationValidationNameAndId DuplicationValidationDelegationNameAndId;
public TextBox TextBoxNameToCheckForDuplication { get; set; }
public Label LabelDuplicationValidationMessage { get; set; }
#endregion
#region Constructor
/// <summary>
/// Pattern For Simple Duplication ValidationName and Id
/// </summary>
/// <param name="pObjFormView">FormView</param>
/// <param name="pObjTextBoxNameToCheckForDuplication">TextBoxName</param>
/// <param name="pObjLabelDuplicationValidationMessage">Lable Showing Error Message</param>
/// <param name="pObjDuplicationValidationNameAndId">Delegation for validation function (name and id)</param>
public clsFormViewDuplicationValidationSetter(FormView pObjFormView, TextBox pObjTextBoxNameToCheckForDuplication, Label pObjLabelDuplicationValidationMessage, DelDuplicationValidationNameAndId pObjDuplicationValidationNameAndId)
{
this.FormView = pObjFormView;
this.TextBoxNameToCheckForDuplication = pObjTextBoxNameToCheckForDuplication;
this.LabelDuplicationValidationMessage = pObjLabelDuplicationValidationMessage;
this.DuplicationValidationDelegationNameAndId = pObjDuplicationValidationNameAndId;
FormView.ItemInserting += new FormViewInsertEventHandler(FormView_ItemInserting);
}
/// <summary>
/// Pattern For Simple Duplication Validation Name
/// </summary>
/// <param name="pObjFormView">FormView</param>
/// <param name="pObjTextBoxNameToCheckForDuplication">TextBoxName</param>
/// <param name="pObjLabelDuplicationValidationMessage">Lable Showing Error Message</param>
/// <param name="pObjDuplicationValidationDelegation">Delegation for validation function (name)</param>
public clsFormViewDuplicationValidationSetter(FormView pObjFormView, TextBox pObjTextBoxNameToCheckForDuplication, Label pObjLabelDuplicationValidationMessage, DelDuplicationValidationNameOnly pObjDuplicationValidationNameOnly)
{
this.FormView = pObjFormView;
this.TextBoxNameToCheckForDuplication = pObjTextBoxNameToCheckForDuplication;
this.LabelDuplicationValidationMessage = pObjLabelDuplicationValidationMessage;
this.DuplicationValidationNameOnly = pObjDuplicationValidationNameOnly;
FormView.ItemInserting += new FormViewInsertEventHandler(FormView_ItemInserting);
}
void FormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
string name = TextBoxNameToCheckForDuplication.Text;
bool IsDuplicate;
// when adding, id always 0
if (DuplicationValidationDelegationNameAndId != null)
IsDuplicate = DuplicationValidationDelegationNameAndId(name, 0);
else
IsDuplicate = DuplicationValidationNameOnly(name);
if (IsDuplicate)
{
e.Cancel = true;
FormView.Visible = true;
LabelDuplicationValidationMessage.Visible = true;
}
}
#endregion
}
當窗體加載使用
protected void Page_Load(object sender, EventArgs e)
{
TextBox objtxtLanguageCode= (TextBox)fmvxLanguage.FindControl("txtLanguageCode");
Label objFormViewLabelDuplicationValidationMessage = (Label)fmvxLanguage.FindControl("lblFormViewDuplicate");
clsFormViewDuplicationValidationSetter objFormViewDuplicationValidationSetter = new clsFormViewDuplicationValidationSetter(fmvxLanguage,objtxtLanguageCode,objFormViewLabelDuplicationValidationMessage,LanguageHelper.HaveLanguageCode);
}
這看起來也許應該是您以前的答案的編輯+擴展名,而不是一個全新的答案......您應該考慮將它們結合起來。 – forsvarir 2011-07-21 14:22:07
即使我不使用更新面板,它也能正常工作,所以我不認爲我需要將它組合起來,您是否需要使用面板才能使其工作? – 2011-07-21 14:47:52