ScriptManager使用验证器导致回发

时间:2017-05-05 01:45:26

标签: c# asp.net validation scriptmanager

这是我的整个页面正文html:

<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
            <asp:TextBox runat="server" ValidationGroup="vg1" ID="txtTest" />
            <asp:RequiredFieldValidator runat="server" ErrorMessage="Required" ControlToValidate="txtTest" ValidationGroup="vg1" />
            <asp:Button runat="server" ValidationGroup="vg1" Text="test" />
        </div>
    </form>
</body>

标题中没有任何内容。没有额外的.js或类似的东西。

如果我删除了ScriptManager,那么如果没有填写文本框,则RequiredFieldValidtor完全不允许回发(显示&#34;必需&#34;按预期)。

使用ScriptManager,回发总是发生。显示错误但仍会发生回发。是什么赋予了?这并没有以这种方式工作。我是否在ScriptManager中缺少一个参数或其他内容以使这一切能够正常运行?

.NET VERSION可能是问题

我已经确定在.net 4.0和eariler 中完全正常,但如果您使用4.5及更高版本则会失败。有什么东西破了4.5或者我没有正确实现它?

谢谢!

1 个答案:

答案 0 :(得分:1)

自.net 4.5版引入不显眼的验证以来,有必要在 Global.asax 页面中注册您的jquery资源,如下所示:

void Application_Start(object sender, EventArgs e)
{
    string JQueryVer = "1.7.1";
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
    {
        Path = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
        DebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
        CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
        CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
        CdnSupportsSecureConnection = true,
        LoadSuccessExpression = "window.jQuery"
    });

}

但是,您还必须在标记中正确定义脚本管理器,如下所示:

<asp:ScriptManager runat="server" EnableScriptGlobalization="True" EnableCdn="True">
     <Scripts>
         <asp:ScriptReference Name="jquery" />
         <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" />
     </Scripts>
</asp:ScriptManager>

如果不启用Cdn,验证器将无法正常运行并允许回发。

这些信息来自各种资源和实验。在我原来的问题中,所有必要的是如上所述定义脚本管理器并且它工作正常。

希望这些信息可以让开发人员使用验证器不显眼的验证来连接回发之间的点。