请教高手,写了点javascript后,验证控件失效的问题!!!

Animatrix 2008-01-03 03:29:56
因为页面有些地方不能用验证控件,所以有一部分控件的验证我使用javascript来完成,代码类似这样写的:
function valid()
{
if(document.getElementById("txtMarryDate").value=="")
{
alert("仪式日不能为空!");
document.getElementById("txtMarryDate").focus();
return false;
}
if(document.getElementById("ddlArea").value=="请选择")
{
alert("请选择地区!");
document.getElementById("ddlArea").focus();
return false;
}
}

提交按钮:
<asp:Button ID="btnUpload" runat="server" Text="确认上传" CssClass="button" OnClick="btnUpload_Click" OnClientClick="return valid();" />


但是我这个页面上有很多地方还是得用验证控件的
现在加上这个javascript代码后,验证控件全部失效了

我知道有一个解决办法
就是在btnUpload_Click事件里加if(Page.IsValid)
但是这样页面就是在刷新后才验证了,这样做是不行的
一刷新,我页面上的上传控件里填的值就都没了
我想问问,怎么才能解决这个问题呢?
即不刷新,又使验证控件有效!
...全文
464 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
jauntlin 2011-03-21
  • 打赏
  • 举报
回复
这么多老大,加一句这个吧!包你成功,我试过
if (typeof(Page_ClientValidate) == 'function')
Page_ClientValidate();
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
全部改为后台判定,回传其file控件的信息丢失是无法避免的,其它的控件信息可以保留
=====================================================================================
难道真的没有办法在前台判断吗?
symbol441 2008-01-04
  • 打赏
  • 举报
回复
全部改为后台判定,回传其file控件的信息丢失是无法避免的,其它的控件信息可以保留
这就是现在网络上大型网站也有这种情况.
这就看楼主如何取舍了


for (int i = 0; i < Repeater1.Items.Count; i++)
{
FileUpload myFile = Repeater1.Items[i].FindControl("FileUpload1") as FileUpload;
if (myFile.FileName == "")
{
Response.Write("error");
}
}

Leezhwei 2008-01-04
  • 打赏
  • 举报
回复
我覺得要麼用js,要麼用驗證控件
一起用應該有衝突吧
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
贴错了,应该是直接把RequiredFieldValidator验证控件放到repeater中去,直接用服务器端验证控件去验证其file控件
让它自己去寻找,就不用再用JS去查找该控件了,你可以试下先

===================================================================================
试过了,一开始就是这么做的,就是这么做不行我才发的这个帖子
因为其他的地方用到了JS自己写方法验证,所以这里的RequiredFieldValidator全部都没用了
symbol441 2008-01-04
  • 打赏
  • 举报
回复
贴错了,应该是直接把RequiredFieldValidator验证控件放到repeater中去,直接用服务器端验证控件去验证其file控件
让它自己去寻找,就不用再用JS去查找该控件了,你可以试下先
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
你把customer验证控件放到repeater中去
==============================================================
customer验证控件放里面,valid()方法还是要去找Repeater1里的file的id啊,怎么找呢?
而且我估计也是要刷新后才验证的出来,因为我一开始就是在Repeater里放的RequiredFieldValidator
我这里只需要验证是否为空,我在Repeater里放RequiredFieldValidator
点提交,刷新后才验证

现在的问题是,如果我能用JS找到Repeater1里的file
我就直接写JS好了,不用验证控件了
该怎么用JS去找呢?
symbol441 2008-01-04
  • 打赏
  • 举报
回复
具体的我也没有用过,估计应该有点难度
在Repeater中的file控件也可以使用服务器端验证控件的

你把customer验证控件放到repeater中去

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="XmlDataSource1">
<ItemTemplate><asp:FileUpload ID="myFile" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ValidateEmptyText="True" ClientValidationFunction="valid()" ControlToValidate="myFile"></asp:CustomValidator>


</ItemTemplate>
</asp:Repeater>

Animatrix 2008-01-04
  • 打赏
  • 举报
回复
使用下面这种方式去调用客户端JS验证
==================================================
这又涉及到另一个问题,我不知道怎么用JS取到repeater的模板列里的FileUpload
如果知道的话我就直接写JS方法验证了,就不用验证控件了
我现在是这么找的:
    var frm=document.all;
for(var i=0;i<frm.length;i++)
{
if(frm[i].id=="fuDouble")
{
if(frm[i].value=="")
{
alert("两人共同照片不能为空!");
return false;
}
}
}

但是没有作用,测试了下,一点反映都没有
我估计是JS写错了
请问怎么用JS找到repeater的模板列里的FileUpload呢?
而且我这个页面上有3个repeater,里面都放的FileUpload
symbol441好人做到底帮个忙吧,卡了一天了,谢谢了!
symbol441 2008-01-04
  • 打赏
  • 举报
回复
我想问问,怎么才能解决这个问题呢?
即不刷新,又使验证控件有效!
----------
哎,新年一来状态太差了,连题都会看错--!.
今天来看,发现楼上已经给出了答案了
再给楼主补充一下吧

如果要同时使用客户端JS验证,又同时要使用服务器端验证控件进行验证
可以使用MS推出的CustomValidator服务器端控件验证控件.

楼主参考一下
使用下面这种方式去调用客户端JS验证,应该就可以解决楼主的问题了

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tb1"
ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="CustomValidator1" runat="server" ValidateEmptyText="True" ClientValidationFunction="valid()" ControlToValidate="txtDate"></asp:CustomValidator>
<asp:Button ID="btn1" runat="server" Text="confirm" />

simplePJlife 2008-01-04
  • 打赏
  • 举报
回复
if (!this.IsPostBack)
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
放到if (!this.IsPostBack)里应该不会刷新了
怎么放?
我是提交按钮点击的时候才验证啊。
duoduo123 2008-01-04
  • 打赏
  • 举报
回复
放到if (!this.IsPostBack)里应该不会刷新了
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
你可以通过CustomValidator对其进行验证
==========================================
后台写代码,会刷新
前台写,找不到REPEATER里的FileUpload
如果能找到,我就直接写JS了
zzh198310 2008-01-04
  • 打赏
  • 举报
回复
你可以通过CustomValidator对其进行验证
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
自己顶一下。。
Animatrix 2008-01-04
  • 打赏
  • 举报
回复
都结帖了还有人关注,谢谢
楼上的这个方法是AJAX吗?这里没必要吧?
guqst 2008-01-04
  • 打赏
  • 举报
回复
检测提交还是用
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
guqst 2008-01-04
  • 打赏
  • 举报
回复
你的意思上传+ 检测, 检测失败不保留上传文件路径?
试试
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox2"
ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1">
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Button"/>
</form>
</body>
kingj2018 2008-01-04
  • 打赏
  • 举报
回复
分,分,我的分呢?
加载更多回复(13)

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧