我有一个绑定到GridView的ObjectDataSource。该对象接受来自TextBox的参数。我遇到的问题是当我使用带有ServerValidate事件的CustomerValidator时,尽管客户验证器返回false,ObjectDataSource仍会尝试执行DataBind。
以下是ASPX页面中的代码。
<asp:TextBox ID="sittingDate" runat="server" />
<asp:CustomValidator ID="DateValidator" runat="server" ControlToValidate="sittingDate" OnServerValidate="DateValidator_ServerValidate" />
<asp:ObjectDataSource ID="BatchDataSource" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetOrCreateSittingBatch" TypeName="BatchBLL" OnSelected="BatchDataSource_Selected" OnSelecting="BatchDataSource_Selecting">
<SelectParameters>
<asp:ControlParameter ControlID="sittingDate" Name="batchDate" PropertyName="Text"
Type="DateTime" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="BatchGridView" runat="server" DataSourceID="BatchDataSource">
在我有的自定义验证器中
protected void DateValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
//Ensure that the entered data is a date.
string input = args.Value;
DateTime result;
args.IsValid = DateTime.TryParse(input.TrimEnd(), out result);
}
如果验证失败,如何从数据绑定中停止ObjectDataSource?
答案 0 :(得分:3)
void BatchDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
if(!Page.IsValid)
e.Cancel = true;
}
答案 1 :(得分:0)
尝试执行Page.Validate,然后检查Page.IsValid是否阻止数据绑定,如:
this.Page.Validate();
if (this.Page.IsValid)
{
...
}
您可以将此添加到Page_Load
事件或可能在ObjectDataSource的OnDataBinding
事件中,以防止在Page.IsValid为false时绑定数据。