Asp.net验证导致gridview selectedindexchanged问题
本文关键字:gridview selectedindexchanged 问题 net 验证 Asp | 更新日期: 2023-09-27 17:50:52
我有一个基本的应用程序,其中包含一个gridview与sqldatasource。数据源包括两个日期参数。参数链接到两个文本框,这两个文本框是预先填充的,但用户可以根据他们想要的日期范围修改它们。我在每个文本框上都有两个验证控件。requiredfieldvalidator和comparefieldvalidator。后者是检查有效的日期格式。
当我(故意)打破其中一个日期时,比如,通过添加一个字母,例如19/03/2014a(我在英国,日期格式是dd/mm/yy),验证会完美地启动,并返回一条消息,说日期无效。
问题:
现在在这一点上,如果我立即选择gridview上的一行,应用程序的细节,我得到一个错误:"转换失败时转换日期时间从字符串"这是预期的,因为我使用文本框中的日期作为参数我的gridview数据源,其中一个现在包含一个无效的日期。为了防止SelectedIndexChanged触发,我试图处理gridview的SelectedIndexChanging事件并取消行选择。下面是它的代码:
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
Page.Validate();
if (!Page.IsValid)
{
e.Cancel = true;
return;
}
}
这个代码"工作",因为它阻止了SelectedIndexChanged事件和gridview数据绑定,但是,我仍然得到相同的错误:"转换失败时转换日期时间从字符串"。
有人能帮我一下吗?一如既往地感谢您的帮助!
亲切的问候
保罗。
编辑:我尝试了正则表达式的建议。我删除了其他验证器(必需的和比较的),出现了同样的错误。没有变化。
我不明白的是,当我取消"GridView1_SelectedIndexChanging"answers"GridView1_SelectedIndexChanged"中的gridview选定索引更改事件时,我预计页面将保持不变。但它完全详细说明了错误。为什么? !我要取消行动!
当我通过输入无效日期的代码步进时,我可以看到gridview没有在那里绑定。它是否可能尝试DataBind() ?
帮助非常感谢!
的问候保罗
我终于自己解决了这个问题。我禁用了自动数据绑定,并在适当的时候自己调用了DataBind()。我想到的另一个措施是在T-SQL中添加验证登录,这样无效的日期就不会导致查询数据库。可能会有更好的解决方案,但我找不到,也没有人建议。删除了必需的字段验证器,并使用正则表达式验证器,其中指定日期的正则表达式并根据它验证页面。
现在,对于必填字段验证器,它不会触发验证,因为文本框有值,但它不会检查文本框是否有有效的日期。
查看Regex验证日期格式dd/mm/yyyy