2015-06-20 3 views
0

Я хочу получить ответ из окна оповещения window.prompt() через код C# За файлом. Это всего лишь однострочный код JavaScript, поэтому я подумал, что могу даже выполнить его из файла Code Behind. Для меня не имеет значения, является ли это тегом <script> в файле .aspx или выполняется через файл .aspx.cs.Получить возвращаемое значение от JS-кода до C#

Я думал о том, что сценарий выполнен (вызван из части C#), а затем имеет возвращаемое значение, присвоенное определенному не видимому полю, но есть ли лучший способ сделать это?

Очевидный способ, вероятно, пойти что-то вроде этого:

.aspx file: 
<script> 
function foo() { 
    document.getElementById('MyFieldID').value = window.prompt('Answer this question:', ''); 
} 
</script> 

.aspx.cs file: 
//////////////////////////////////////////////// 
//MyFieldID.Text now contains whatever I want// 
////////////////////////////////////////////// 

Что вы говорите? Есть ли лучший способ?

ответ

0

Лучше Способ всегда основан на мнениях. Я бы сказал, что у вас есть несколько вариантов, все зависит от того, что вы делаете. HTTP и ASP.NET предоставляют нам несколько способов отправки данных на сервер, есть 3 основные из них, прежде чем HTML5:

  1. Строка запроса
  2. Форма значения
  3. AJAX звонки

If вы перенаправляете пользователя на новую страницу после ответа на запрос, вы можете просто отправить их на адрес yournewurl.aspx?promptAnswer=*whatever*

Если вы делаете обратную передачу, вы можете использовать значение формы (это похоже на то, что вы делаете в своем примере). Вы можете поместить на странице <asp:HiddenField> и заполнить ее из JavaScript перед отправкой формы.

Если вам нужен только ответ быстрого ответа, но вы не пытаетесь перезагрузить страницу, вы можете сделать вызов AJAX, который отправляет переменную на сервер (для отправки данных все еще используется # 1 или # 2, это просто делает это без перезагрузки страницы).

Какой из этих трех вариантов работает лучше всего, зависит от вашей реализации. Однако ваше решение должно работать нормально. Однако, поскольку управление, которое вы, вероятно, будете использовать для заполнения значения, равно HiddenField, оно будет в MyFieldID.Value не MyFieldID.Text. Единственное, что вам нужно иметь дело, это то, что ваш MyFieldID вложен в некоторые другие элементы управления (например, ContentPlaceHolder), так что ClientID имеет именованные контейнеры, притворяющиеся им, так что это действительно что-то вроде ContentPlanceHolder1_MyFieldID при обращении к JavaScript.

+0

Спасибо за ваш ответ, я не согласен с тем, что это субъективно. Некоторые вещи - это только производительность (какой путь занимает меньше памяти или что-то еще) является довольно объективным. – Zim

+0

@ Zim согласился. Но это зависит от ваших потребностей. Если вы хотите предоставить пользователю мгновенную обратную связь и не перезагружать страницу, AJAX - это путь. Если вы уже отправляете форму для обратной передачи, скрытое поле - путь. Если вы просто перенаправляете, строка запроса - это путь. Я считаю, что это субъективно, потому что это зависит от ситуации. Поскольку вы не обеспечили ситуацию, я попытался привести примеры, охватывающие разные ситуации. Если мой ответ не распространяется на ваш прецедент, просьба предоставить более подробную информацию и с удовольствием добавлю больше к моему ответу. – dman2306

Смежные вопросы