ScriptManager 导致带有验证器的回发
ScriptManager causing postbacks with validators
这是我的整个页面 body 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>
header 中没有任何内容。没有额外的 .js 或类似的东西。
如果我删除 ScriptManager,RequiredFieldValidtor 可以完美工作,因为如果文本框未填写(按预期显示 "Required")则不允许回发。
有了 ScriptManager,回发总是会发生。错误显示但回发仍然发生。是什么赋予了?这以前不是这样工作的。我是否缺少参数或 ScriptManager 中的某些内容以允许这一切运行?
.NET 版本可能是问题所在
我确定这在 .net 4.0 和 eariler 中工作得很好,但如果您使用 4.5 及更高版本,则会失败。 4.5 中出现问题,还是我没有正确实施它?
谢谢!
自从 .net 版本 4.5 引入了不显眼的验证后,就必须在 [=32= 中注册您的 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,验证器将无法正常运行并允许回发。
此信息是通过各种资源和实验获得的。在我原来的问题中,所有必要的就是如上所述定义脚本管理器并且它工作正常。
希望此信息将允许开发人员使用 验证器 和 不显眼的验证 [=27] 连接 postbacks 之间的点=].
这是我的整个页面 body 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>
header 中没有任何内容。没有额外的 .js 或类似的东西。
如果我删除 ScriptManager,RequiredFieldValidtor 可以完美工作,因为如果文本框未填写(按预期显示 "Required")则不允许回发。
有了 ScriptManager,回发总是会发生。错误显示但回发仍然发生。是什么赋予了?这以前不是这样工作的。我是否缺少参数或 ScriptManager 中的某些内容以允许这一切运行?
.NET 版本可能是问题所在
我确定这在 .net 4.0 和 eariler 中工作得很好,但如果您使用 4.5 及更高版本,则会失败。 4.5 中出现问题,还是我没有正确实施它?
谢谢!
自从 .net 版本 4.5 引入了不显眼的验证后,就必须在 [=32= 中注册您的 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,验证器将无法正常运行并允许回发。
此信息是通过各种资源和实验获得的。在我原来的问题中,所有必要的就是如上所述定义脚本管理器并且它工作正常。
希望此信息将允许开发人员使用 验证器 和 不显眼的验证 [=27] 连接 postbacks 之间的点=].