2013-05-13 2 views
0

Я использую скрытые поля ввода для передачи значений из моего javascript в код позади. Это отлично работает, но когда я пытаюсь очистить поля от кода, стоящего за этим, это не сработает.Удаление скрытых полей ввода после обратной передачи

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

Я устал делать это несколькими путями, но все они не работают.

Это самый простой способ, и большинство логики, но doens't хотите очистить значения

iRowNumberTblOne.Value = ""; 

Я даже сделал JavaScript, поэтому значения будут очищены на стороне клиента. Предупреждение появляется в первый раз «при запуске», но после обратной передачи кажется, что код позади не находит javascript снова.

<script type="text/javascript"> 
     function clearInputFileds() { 
     alert('test'); 
      document.getElementById("ctl00_contentHolder_iSiteAlias").value = ""; 
      document.getElementById("ctl00_contentHolder_iServiceName").value = ""; 
      document.getElementById("ctl00_contentHolder_iRowNumberTblOne").value = ""; 
      document.getElementById("ctl00_contentHolder_iRowNumberTblTwo").value = ""; 

     } 


    </script> 

Это код, я использую в коде

Page.ClientScript.RegisterStartupScript(GetType(), "", "clearInputFileds();", true); 

Есть ли у вас какие-либо идеи, почему эти методы не работают? Может быть, знаете, лучший способ очистить эти поля?

EDIT:

Входные поля заполняются с помощью яваскрипта функции. Эта функция получает пробежки по ключу.

function setClickedValues(siteAlias, serviceName, rowNumberTblOne, rowNumberTblTwo) { 
      document.getElementById("ctl00_contentHolder_iSiteAlias").value = siteAlias; 
      document.getElementById("ctl00_contentHolder_iServiceName").value = serviceName; 
      document.getElementById("ctl00_contentHolder_iRowNumberTblOne").value = rowNumberTblOne; 
      document.getElementById("ctl00_contentHolder_iRowNumberTblTwo").value = rowNumberTblTwo; 

     } 
+0

Какой код присваивает значения скрытым элементам управления? – Matthew

+0

Самый простой способ очищает значение, но он может быть заменен позже. Когда и где выполняется этот код? – Guffa

+0

@Matthew Обновлено сообщение для вас. в Guffa Оба onLoad. – Freddy

ответ

2

Это можно сделать в коде позади. Но важно сделать это в нужное время в ASP.Net Application Livecycle. Присмотритесь на:

Обычно (пере) установить значение в обработчики событий щелчка кнопки отправки или в случае LoadComplete. Если вы это сделаете раньше, значение будет перезаписано во время восстановления ViewState.

Следующее изображение экстремально полезно при работе со страницами ASP.NET и ViewState:

ASP.NET Page Life Cycle
(Источник: http://msdn.microsoft.com/en-us/library/ms178472%28v=vs.100%29.aspx)

BTW: Это очень плохая идея сбросьте значение в клиентском коде с помощью жестко закодированных идентификаторов, поскольку они могут быть изменены.

+0

Omg thats диаграмма, которую я искал! Сделал это в Page_PreRender, и он работает. Большое спасибо! – Freddy

+0

@Freddy: Вот почему у меня есть копия этого листа рядом с моей клавиатурой :-) – CodeZombie

2

Поскольку все те серверные элементы (у вас есть их runat="server") самый простой способ очистить значения просто сделать:

elementID.Value=""; 

На всех из них после обратной передачи. Если вы говорите, что значения не очищаются после выполнения вышеуказанного, это, вероятно, потому, что вы не проверяете if(!IsPostback) перед выполнением функции, которая заполняет значения в первую очередь.

Ваш код на стороне клиента также должен работать, но это, вероятно, не работает, потому что ваш последний параметр для RegisterStartupScript равен true, что указывает на то, что теги <script> должны быть добавлены. Это может вызвать проблему, потому что ваша функция уже заключена в теги <script>, поэтому в этом случае параметр true не нужен.

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