2013-11-21 1 views
3

Я устанавливаю скрытый поданное значение через JavaScript, как показано нижеСкрытое значение поля обновлено, но не отображается обновленное значение в codebehind?

<script lang="JavaScript" type="text/javascript"> 
function ChangeVal() 
{ 
    var elem = document.getElementById("btnDownloadStream"); 
    if (elem.value == "Start") 
    { 
    elem.value = "Stop"; 
    document.getElementById('myHiddenInput').value = "1"; 
    } 
    else 
    { 
    document.getElementById('myHiddenInput').value = "0"; 
    elem.value = "Start"; 
    } 
} 

Я пытаюсь получить скрытое значение поля в коде позади. Мой код

HiddenField myHiddenInput = (HiddenField)Page.FindControl("myHiddenInput"); 
var val = myHiddenInput.Value; 

Перед этой линии я звоню одну функцию, которая создает и формирует GetResponseStream(). Выполняя это, я не могу получить значение от серверных элементов управления. Зачем?

+0

'Перед этой строкой я вызываю одну функцию, которая создает и генерирует GetResponseStream().': Так что вы говорите, если вы ** не ** делаете это, это работает? –

+0

Да Michael Если я не вызываю метод GetResponseStream(), то я могу просмотреть обновленное значение. –

+0

Хорошо, хорошо, тогда этот код в вопросе, вероятно, очень важен. –

ответ

0

Убедитесь, что скрытые поля имеют runat="server" атрибут ..

+0

Мои скрытые поданном работает на стороне сервера только как <жерех: ид = RUNAT = «сервер» скрытое «myHiddenInput» /> Я могу видеть обновленное значение в UI. Но в коде за его показом старое значение –

0

Вы забываете о ViewState. Если вы измените данные в скрытом поле с помощью кода java-скрипта, то ViewState не получите эти изменения, и именно поэтому вы не можете получить правильное значение в коде.

+0

Попробуйте отключить ViewState на странице. Вы можете добавить это в web.config <страницы EnableViewState = "ложь" /> Также рекомендую вам эту статью: http://msdn.microsoft.com/en-us/library/ms972976. aspx Существует также описание отключения состояния просмотра. –

0

Установите Runat = «сервер» атрибут вашего скрытого поля, как показано ниже:

<input type="hidden" value="" id="myHiddenInput" runat="server" /> 

Затем обновите ваш яваскрипта функции, как показано ниже:

function ChangeVal() { 
      var elem = document.getElementById("btnDownloadStream"); 
      if (elem.value == "Start") { 
       elem.value = "Stop"; 
       document.getElementById('<%=myHiddenInput.ClientID%>').value = "1"; 
      } 
      else { 
       document.getElementById('<%=myHiddenInput.ClientID%>').value = "0"; 
       elem.value = "Start"; 
      } 
     } 

теперь вы можете получить быстрый доступ к вашим значение скрытого поля в коде без использования Page. FindControl как указано:

var val = this.myHiddenInput.Value; 

Update:

Одна вещь, которую я заметил, что ваша кнопка кнопка на стороне сервера и в вашем JavaScript вы звоните

var elem = document.getElementById("btnDownloadStream"); 

Я думаю, что это должно быть

var elem = document.getElementById('<%=btnDownloadStream.ClientId%>') 

в противном случае вы всегда получите значение еще часть

Убедитесь, что это не тот случай.

+0

Да, я тоже пробовал этот метод. Мой код защищен недействительным btnDownloadStream_Click (объект отправителя, EventArgs е) { вар вал = this.myHiddenInput.Value; if (val == "1") { HttpWebRequest request = (HttpWebRequest) WebRequest.Create (url); HttpWebResponse fileResp = (HttpWebResponse) request.GetResponse(); stream = fileResp.GetResponseStream(); var resp = HttpContext.Current.Response; используя (Var фс = новый FileStream (VideoPathFile, FileMode.Create)) { \t // Код идет здесь } }} –

+0

чем она не работает? Вы получаете какое-либо исключение? – SpiderCode

+0

Нет, я не получаю никаких ошибок. Просто он показывает старую ценность. Когда нажата кнопка «Первое время», я устанавливаю значение = 1, второе значение времени = 0. Но он по-прежнему показывает значение = 1 в коде позади, но в UI отображается значение = 0 –

0

Becuase Изменение значения в javascript не влияет на значение на стороне сервера.

, если вы хотите изменить значение на стороне сервера из JavaScript: Вы можете попробовать следующее

// Javascript 
var myHidden = document.getElementById("<%:myHiddenId.ClientId%>"); 
myHidden.value = myJSVariable; 

Убедитесь, что myHidden является сервер управления.

0

Это также случается, если вы используете UpdatePannel на своей странице. если это так, поместите HiddenField внутри UpdatePannel и повторите попытку.

0

хорошо @ Vishweshwar Kapse отвечает на ваш вопрос.

Поместите свое скрытое поле в панель обновления и не забудьте добавить событие нажатия кнопки в триггере.

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