gpt4 book ai didi

c# - 自定义验证器是否在 FormView 中工作?

转载 作者:行者123 更新时间:2023-11-30 12:51:50 27 4
gpt4 key购买 nike

我通过谷歌搜索,发现很多人都在为这个问题苦苦挣扎,但我仍然没有找到正确的答案。

http://i.stack.imgur.com/15jen.png

我有一个表单 View ,需要检查语言代码是否重复,必须检查服务器端脚本,因为它需要通过数据库进行检查。

更新于 2011 年 5 月 4 日,19.32//我在这里添加了表单 View 的属性,所以如果有什么不对的地方可能有人会指出。

<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>

我使用插入命令作为插入按钮,原因验证设置为真。

<asp:CustomValidator ID="cvdLanguageCodeNameDuplicate" runat="server" 
ControlToValidate="txtLanguageCode" CssClass="IconValidation"
ErrorMessage="&lt;img src=&quot;/images/icon/validation-Icon.png&quot;/&gt; Language code name is duplicated."
onservervalidate="cvdLanguageCodeNameDuplicate_ServerValidate"> </asp:CustomValidator>

Custom Validator 设置如上

当我单击按钮并尝试将断点放在 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);
}

最佳答案

您需要设置按钮和 CustomValidator 的验证组。

试试这个

<dxe:ASPxButton ID="btnAddNewLanguage" runat="server" CausesValidation="True" Image-Url="~/images/icon/Save-icon.png" CommandName="Insert" Text="Save" ValidationGroup="V> 
</dxe:ASPxButton>



<asp:CustomValidator ID="cvdLanguageCodeNameDuplicate" runat="server" ControlToValidate="txtLanguageCode" CssClass="IconValidation" ErrorMessage="&lt;img src=&quot;/images/icon/validation-Icon.png&quot;/&gt; Language code name is duplicated." onservervalidate="cvdLanguageCodeNameDuplicate_ServerValidate" ValidationGroup="V> </asp:CustomValidator>

关于c# - 自定义验证器是否在 FormView 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5880359/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com