2011-05-20 45 views
1

我希望我可以粘贴我的标记,但它太复杂并且包含很多对客户公司名称的引用。我希望有丰富经验的人能够指引我走向正确的方向。ASP.NET 3.5验证组不能正常工作

我们有一个母版页,其中包含ValidationSummary,它不是验证组的一部分。在我们的内容页面上,我们有另一个分配给名为ValReject的验证组的ValidationSummary。在内容页面上还有一个CustomValidator,它使用ClientValidationFunction和一个按钮,这两个按钮都被分配给ValReject。

当我点击按钮时,客户端函数会执行一次,但错误会同时报告验证摘要,内容页面上的内容和母版页上的内容。我甚至还添加了第三个验证摘要,并将其组设置为“asdf”之类的内容,但也会报告,这意味着所有三个验证摘要在页面上显示相同的错误。

然后我创建了一个单独的ASP.NET测试项目,粘贴了所有的代码,然后运行它并验证它应该如何。

然后我在内容页面上使用了AutoEventWireup。当我将它设置为false时,验证有效,但页面加载事件不会触发。那是怎么回事?

我知道你可能需要的代码样本,但就像我说的,我只是不能做,没有经过一个巨大的头痛会(相信我,主人和内容页的标记是巨大的。

问题这里是:有没有人有一个想法,可能会导致单个验证器报告页面上的所有验证摘要,即使其中只有一个与验证器和按钮共享相同的验证组?

编辑:粘贴我的测试应用程序的标记,我不得不删除一些标签,以使其工作,因为测试应用程序没有对真正的母版页使用的一些程序集的引用。我删除的一些事情是:

<%@ Register Assembly="RadMenu.Net2" Namespace="Telerik.WebControls" TagPrefix="radM" %> 

<radM:RadMenu ID="RadMenu1" runat="server" DataSourceID="smdsMenu" Skin="CssGrey" ClickToOpen="True" EnableViewState="False" CausesValidation="false" /> 

所以,它的作品在我的测试应用程序的事实使我认为我们正在做我们的生产应用程序的东西,我不会在我的测试应用程序做结论。是的,我知道这是模糊的,但也许一个灯泡会在别人的脑海中熄灭。

回答

3

男子:使用Page_ClientValidate任何外部验证在JavaScript

的形式完成,几个小时和几个小时的旋转我的轮子,我终于明白了。我们使用这个扩展方法来禁用按键双击:

public static void DisableDoubleClick(this Button Control) 
    { 
     System.Text.StringBuilder sb = new System.Text.StringBuilder(); 

     sb.Append("if (typeof(Page_ClientValidate) == 'function') { "); 
     sb.Append("if (Page_ClientValidate() == false) { return false; }} "); 
     sb.Append("this.disabled = true;"); 
     sb.Append(Control.Page.ClientScript.GetPostBackEventReference(Control, "")); 
     sb.Append(";"); 
     Control.Attributes.Add("onclick", sb.ToString()); 
    } 

这是被搞乱了验证,因为它是全球调用验证。我解决了这个问题通过进行以下更改:

 sb.Append(string.Format("if (Page_ClientValidate({0}) == false) {{ return false; }}}} ", 
      Control.ValidationGroup == string.Empty ? string.Empty : string.Format("\"{0}\"", Control.ValidationGroup))); 

什么避让我,当我设置AutoEventWireup为false,看看会发生什么。这使得页面加载事件不会触发,这是上述扩展方法被调用的地方。这个问题在干草堆里有什么针。

我不怪任何人,不回答,由于缺乏细节,但我会的情况下,任何人都可以使用它保持下去。

编辑:感谢slfan和GBS。我刚刚想出了这个问题,并在回来这里后我的答案时,我看得出来你们俩基本上是从问题的两面解决我的问题。页面加载事件是其中结合物存在的和被称为被搞乱了Page_ClientValidate功能扩展方法。既然你们俩在技术上是正确的,我不能授予你们两个答案,我希望如果我记住我自己的答案在这里没有人会不高兴。你们两个绝对擅长用最少的细节和无代码样本来分析这些问题。道具。

+0

几个小时的挫折显示器冲孔的水平后,我意识到,我们做同样的事情。 – PhilChuang 2013-01-11 19:48:46

1

AutoEventWireup使ASP.NET自动调用Page_Load事件,而无需注册到事件。另一种方法是重写OnLoad方法。当Page_Load未被调用时,您的页面似乎正常工作。你在这个方法里面做了什么?一些奇怪的数据绑定?如果取消注释此代码,那么它会起作用吗?像这样,你可以将问题缩小到你没有在你的问题中显示的真正问题。

1

两件事情我会找:

1:代码隐藏于Page.Validate()的任何显式调用