Подтвердить что ты не робот

Свойство Set Text для asp: label в Javascript PROPER

У меня есть серия текстовых полей в форме. Когда пользователь вставляет числа в эти текстовые поля, выполняются вычисления и элементы управления <asp:Label> обновляются с помощью JavaScript, чтобы отразить эти вычисления:

document.getElementById('<%=TotalLoans.ClientID %>').innerHTML = TotalLoans;

Это правильно обновляет пользовательский интерфейс. Однако, когда я пытаюсь получить доступ к значению в коде, свойство Text пусто. Это имеет смысл, я думаю, поскольку я обновлял свойство innerHTML через JavaScript.

//TotalLoans.Text will always be equal to "" in this scenario
double bTotalLoans = string.IsNullOrEmpty(TotalLoans.Text) 
                   ? 0.00 
                   : Convert.ToDouble(TotalLoans.Text);

Как обновить свойство Text <asp:Label> через JavaScript таким образом, чтобы я мог прочитать свойство в коде?

Update

Это небольшая проблема в большой форме, содержащей 41 ярлык, каждый из которых отображает результаты некоторых вычислений для пользователя. По совету FishBasketGordo я преобразовал <asp:Label> в отключенную <asp:TextBox>. Я устанавливаю значение нового текстового поля как такового:

    document.getElementById('<%=TotalLoans.ClientID %>').value = TotalLoans;

Опять же, в кодовом коде значение TotalLoans.Text всегда равно "".


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

Я использую JavaScript для управления значениями свойств некоторых элементов управления. Мне нужно иметь доступ к этим управляемым значениям из кода, когда нажата кнопка "Отправить".

Любой совет, как я могу это сделать?

Обновление 2

Что касается ответа @James Johnson, я не могу получить значение, используя свойство .innerText, как было предложено. У меня EnableViewState установлено значение true на <asp:Label>. Есть ли что-то еще, что мне не хватает?

Я не понимаю, почему, когда я печатаю текстовое поле и отправляю форму, я могу получить доступ к значению в коде, но когда я программно меняю текст текстового поля или метки с помощью JavaScript, я не могу получить доступ новое значение.

4b9b3361

Ответ 1

Поместите HiddenField Control в вашу форму.

<asp:HiddenField ID="hidden" runat="server" />

Создать свойство в форме

protected String LabelProperty
{
    get
    {
        return hidden.Value;
    }
    set
    {
        hidden.Value = value;
    }
}

Обновить значение скрытого поля из JavaScript

<script>
   function UpdateControl() {
            document.getElementById('<%=hidden.ClientID %>').value = '12';
   }
</script>

Теперь вы можете получить доступ к Свойству непосредственно через Postback. Обновленное значение Label Control будет потеряно через Postback, если оно используется непосредственно в коде.

Ответ 2

Это работает для меня с контролем метки asp.

 function changeEmaillbl() {


         if (document.getElementById('<%=rbAgency.ClientID%>').checked = true) {
             document.getElementById('<%=lblUsername.ClientID%>').innerHTML = 'Accredited No.:';
         } 
     }

Ответ 3

Используйте следующий код

<span id="sptext" runat="server"></span>

Java Script

document.getElementById('<%=sptext'%>).innerHTML='change text';

С#

sptext.innerHTML

Ответ 4

Вместо использования Label используйте текстовый ввод:

<script type="text/javascript">
    onChange = function(ctrl) {
        var txt = document.getElementById("<%= txtResult.ClientID %>");
        if (txt){
            txt.value = ctrl.value;
        }           
    }
</script>

<asp:TextBox ID="txtTest" runat="server" onchange="onChange(this);" />      

<!-- pseudo label that will survive postback -->  
<input type="text" id="txtResult" runat="server" readonly="readonly" tabindex="-1000" style="border:0px;background-color:transparent;" />        

<asp:Button ID="btnTest" runat="server" Text="Test" />

Ответ 5

Поскольку вы обновили клиентскую сторону вашего ярлыка, вам понадобится post-back для того, чтобы вы отображали код на стороне сервера, чтобы отразить изменения.

Если вы не знаете, как это сделать, вот как я это делал в прошлом.

Создайте скрытое поле:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />

Создайте кнопку, на которой есть как клиентская, так и серверная функции. Функция клиентской стороны заполнит ваше скрытое поле, и серверная сторона прочтет ее. Убедитесь, что клиентская сторона вызывается первым.

<asp:Button ID="_Submit" runat="server" Text="Submit Button" OnClientClick="TestSubmit();" OnClick="_Submit_Click" />

Функция клиентской стороны Javascript:

function TestSubmit() {
              try {

             var message = "Message to Pass";
             document.getElementById('__EVENTTARGET').value = message;

           } catch (err) {
              alert(err.message);

          }

      }

Функция серверной стороны С#

protected void _Submit_Click(object sender, EventArgs e)
{
     // Hidden Value after postback
     string hiddenVal= Request.Form["__EVENTTARGET"];
}

Надеюсь, это поможет!

Ответ 6

Информация о ярлыках хранится на входе ViewState при обратной передаче (имейте в виду, что сервер ничего не знает о странице за пределами введенных значений формы, включая текст вашей метки).. вам нужно как-то обновить это на на стороне клиента, чтобы узнать, что изменилось на этом ярлыке, что, я думаю, не стоило бы вашего времени.

Я не совсем уверен, какую проблему вы пытаетесь решить здесь, но это может дать вам несколько идей о том, как это сделать:

Вы могли бы создать скрытое поле, чтобы идти вместе с вашим ярлыком, и в любое время, когда вы обновляете свой ярлык, вы также обновляете это значение. Затем в коде, указанном ниже, свойство Text на ярлыке является тем, что было в это скрытое поле.

Ответ 7

Asp.net codebehind запускается на сервере первым, а затем страница отображается клиенту (браузеру). Codebehind не имеет доступа к стороне клиента (javascript, html), поскольку он живет только на сервере.

Итак, либо используйте ajax, либо отправленное значение метки для кода. Вы можете использовать PageMethods или просто отправить страницу на сервер, где живет codebehind, поэтому codebehind может узнать обновленное значение:)