Lefteris Gkinis Ответов: 1

Выполняется код функции из Java скрипта


На моем веб-сайте у меня есть следующее asp.net код:

<div id="FileBrowserDiv" runat="server"  class="FileBrowserDiv" >
     <asp:Button ID="UpLoadFile" runat="server" Text="File Selection" CssClass="FileSelection" OnClick="fireFileClick()" />
     <asp:FileUpload ID="UpLoadButton" runat="server" cssclass="FakeButton"  />
	<script type="text/javascript">
	  function fireFileClick() {
            var objfile = document.getElementById("<%= UpLoadButton.ClientID %>");
            objfile.click();
            var objTextBox = document.getElementById("<%= UpLoadButton.ClientID %>");
            objTextBox.value = objfile.value;
		
</script>
      <div id ="filelabeldiv" runat="server" class="FileLabelDiv">
      <asp:Label ID="FileLabel"  runat="server"  CssClass="FileLabel" />
      </div>	
      <asp:Button ID="FileSave" runat="server" Text="Save File" CssClass="FileSave" />
      </div>


И в моем коде позади меня есть функция:

Public Function UpLoadBtn_change()
		If IsPostBack Then
		If UpLoadButton.HasFile Then
		....Some code manipulating the Uploaded file....
			End If
		End If
	End Function


То, что я пытаюсь сделать здесь, это:
Нажав на кнопку
UpLoadFile
Кнопка, которую я хочу вызвать
asp:FileUpload
Кнопка.
Для этого я управляю компанией
fireFileClick()
в Java-скрипте.
В `ie explorer` эта ситуация работает хорошо.
Но в других браузерах это не работает, когда я пытаюсь запустить код позади функции.
Очевидно, что что-то не так с этим кодом, но я не могу понять, где эта ошибка находится.
И причина этого в том, что я не программист на Java, на самом деле у меня нет специальных знаний, которые мне нужны.
Есть ли кто-нибудь, кто мог бы помочь мне в этом вопросе?

Что я уже пробовал:

То, что я обнаружил до сих пор, это то, что:
Когда я нажимаю первую кнопку
<asp:Button ID="UpLoadFile" runat="server" Text="File Selection" CssClass="FileSelection" OnClick="fireFileClick()" />

Он запускает сценарий
var objfile = document.getElementById("<%= UpLoadButton.ClientID %>");
            objfile.click();

Который нажимает на следующую (скрытую) кнопку. Это действие дает мне возможность выбрать правильный файл для загрузки.
Этот файл присваивается (с помощью второй строки скрипта)
var objTextBox = document.getElementById("<%= UpLoadButton.ClientID %>");
            objTextBox.value = objfile.value;

В кнопку " fileupload` (скрытая). Таким образом, этот файл он запускает postback автоматически и дает мне необходимую информацию.
ВАЖНЫЙ Будьте внимательны в последовательности действий это очень важно важный.
Это происходит только в " ie explorer`.
В других браузерах действие post back срабатывает до того, как кнопка "fileupload"принимает свое значение, таким образом, возвращает мне результат "нет выбранного файла".
И вот в чем моя проблема.
Каково же может быть решение этой проблемы?

F-ES Sitecore

Ваш javascript не вызывает ваш кодовый метод UpLoadBtn_change. Сначала запускается весь ваш .net-код (поэтому ваш метод UpLoadBtn_change будет запущен при загрузке страницы), а полученный html-код отправляется клиенту для обработки. javascript полностью работает в браузере, поэтому просмотрите исходный код страницы, и вы увидите;

тревога(" ");

Таким образом, ваш javascript просто показывает пустое предупреждение, а не запускает ваш серверный код. Если вы ищете в google "asynch file upload asp.net" вы, вероятно, найдете код, который похож на то, что вы, вероятно, хотите достичь.

Prifti Constantine

Вы всегда можете использовать __DoPostBack("идентификатор вашего элемента управления","событие, которое вы хотите вызвать")
Для получения дополнительной информации вы всегда можете проверить документацию javascript __DoPostback . Я думаю, что это ваше решение. Для получения дополнительной информации не стесняйтесь спрашивать.

Lefteris Gkinis

Я уже пробовал это в своем сценарии
пусть HFile = Boolean;
HFile = document.getElementById("<%=UpLoadButton.HasFile %>");
И документ.getElementById("<%=UpLoadButton.HasFile%>");
содержит значение `True`.
Но это значение не возвращается в логическую переменную "HFile", а вместо этого выдает мне значение "null".
Почему так случилось?

Prifti Constantine

Во-первых, то, что вы делаете, заключается в том, что вы пытаетесь получить элемент по идентификатору, но в параметре вы передаете что-то еще... Поскольку вы знаете идентификатор элемента, то вам следует сделать следующее:

var UploadElement = document.getElementById("<%= UpLoadButton.ClientID%>");
Теперь у вас есть элемент, который вы хотите... Если вы хотите получить значение, то все, что вам нужно сделать, это :
ВАР UploadValue = UploadElement.значение;

1 Ответов

Рейтинг:
4

Vincent Maverick Durano

То OnClick событие стандарта ASP.NET Button элемент управления-это событие на стороне сервера, которое означает, что он запускает его и заставляет ваш код выполнять серверный код перед вашим клиентским кодом (JavaScript). Для вызова функции JavaScript можно использовать OnClientClick событие кнопки вместо этого: Кнопка.Свойство OnClientClick (System.Web.UI.WebControls) | Microsoft Docs[^]

С учетом сказанного вам все равно придется пересмотреть свой подход. Смешивание серверной и клиентской функциональности причинит вам боль. Я бы посоветовал вам вместо этого выполнить асинхронный вызов, используя AJAX для связи с вашими серверными методами. Таким образом, вы можете иметь полный контроль над тем, как вы запускаете последовательность своей логики.


Lefteris Gkinis

@Vincent Maverick Durano я уже пробовал это сделать. Но в любом случае Java-скрипт работает отлично. и происходит управление <asp:Fileupload />, открывает файловый браузер, который дает мне возможность выбрать мой файл для загрузки.
Но с этого момента начинаются мои проблемы.
В кнопке FileUpload я использую событие OnChange, которое кэширует действие. Но у меня нет никакого скрипта для запуска кода за public sub.
Даже если я использую прямой fireon (OnChange="UpLoadBtn()", он возвращает мне ошибку:
Необработанное исключение в строке 116, колонке 119 in http://localhost:50761/Pages/Production.aspx
0x800a1391 - JavaScript runtime error: 'UpLoadBtn' не определен

UpLoadBtn не определен, и я заключаю, что это моя проблема.
Я думаю опубликовать еще один "вопрос" с этим вопросом.
В любом случае большое вам спасибо, вы мне очень помогли.