Мой сценарий:
- У меня есть валидатор в
UpdatePanel
. - Я хочу объединить свои сценарии, поэтому я использую
CompositeScript
вScriptManager
и включаю ссылку наWebUIValidation.js
- Я использую .NET 4.0
Моя проблема:
- Когда я асинхронно обновляю панель, .NET загружает
WebUIValidation.js
(в файлеScriptresource.axd
) в асинхронный ответ, даже если он был загружен в начальномCompositeScript
-сгенерированном скрипте. Это проблема, потому что у меня есть собственный код, который перехватывает некоторые функции вWebUIValidation.js
, а асинхронный ответ отменяет мои взломы. - Если вы переместите ссылку с
WebUIValidation.js
наScripts
вScriptManager
, проблем не будет. - Если бы у вас был
WebUIValidation.js
как единственный элемент вCompositeScript
(я знаю, это бессмысленно), тогда не было бы проблем. - Эта асинхронная перезагрузка не происходит с другими скриптами библиотеки .NET, например.
WebForm.js
Что я хочу узнать:
- Есть ли причина, по которой
WebUIValidation.js
загружается в асинхронный ответ, когда он уже включен вCompositeScript
?
Кто-то опубликовал аналогичную (но не повторяющуюся) проблему сегодня и склоняется к тому, чтобы сказать, что WebUIValidation.js
не может обрабатываться ScriptManager
. Кто-нибудь может это проверить?
Для репликации используйте следующие два файла
test1.js
// To be added to the composite script
console.log('Test 1 Loaded');
test.aspx
<%@ Page Language="vb" AutoEventWireup="false" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
</head>
<body>
<script language="VB" runat="server" runat="server">
Protected Sub ButtonClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles TestButton.Click
ButtonClickFeedback.Text = "Button clicked At " & Date.Now.ToString & "; Look at the scripts in your Developer Tools, there is now a separate script for WebUIValidation.js loaded, in spite of the composite script."
End Sub
</script>
<form runat="server">
<asp:ScriptManager runat="server">
<CompositeScript>
<Scripts>
<asp:ScriptReference Path="~/test.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" />
</Scripts>
</CompositeScript>
</asp:ScriptManager>
<h1>WebUIValidation.js, CompositeScript and UpdatePanel test</h1>
<asp:UpdatePanel runat="server" ID="ButtonUpdatePanel">
<ContentTemplate>
<asp:Label runat="server" >This is a section with a validator that is within an UpdatePanel. If you look at the scripts loaded, you will see the composite script in the detail.</asp:Label>
<asp:Textbox ID="TestInputForValidator" runat="server" Text="This is populated so it will validate"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="TestInputForValidator" ErrorMessage="You must write something" /><br />
<asp:Button ID="TestButton" Text="Click Me!" runat="server" /><br />
<asp:Literal ID="ButtonClickFeedback" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TestButton" />
</Triggers>
</asp:UpdatePanel>
</form>
</body>
</html>
Если вы используете инструменты разработчика для проверки того, какие скрипты загружаются, вы должны увидеть дополнительный Scriptresource.axd (содержащий WebUIValidation.js), загружаемый после нажатия кнопки, несмотря на существование Scriptresource.axd с составной скрипт. test.js - это просто образец js-файла, имитирующий идею составных скриптов.
<Scripts>
ScriptManager
, а не вCompositeScripts
- это означает, что у меня есть два вызова сценария (составной и отдельный WebUIValidation в ScriptResource. axd) на веб-странице. Не идеально, но, похоже, проблема заключается в самом способе управления WebUIValidation.js. - person alergy   schedule 15.05.2014WebUIValidation.js
в разделScript
безCompositeScripts
в качестве родителя не решило проблему.ScriptResource.axd
все еще загружается после частичной обратной передачи, поэтому мои переопределенные функции проверки будут потеряны. - person Martin Braun   schedule 21.11.2016