Установите свойство Text asp: label в Javascript надлежащим образом

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

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

это верно обновляет пользовательский интерфейс. Однако, когда я пытаюсь получить доступ к значению в codebehind,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 таким образом, что я могу прочитать свойство в codebehind?

обновление

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

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

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


Я не против изменить свой подход к этому, но вот в чем дело.

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

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

обновление 2

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

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

7 ответов


поместите элемент управления HiddenField в свою форму.

<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. The Label контроль обновленное значение будет потеряно через PostBack в случае, если он используется непосредственно в коде .


это работает для меня с ASP label control.

 function changeEmaillbl() {


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

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

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

Java Script

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

C#

sptext.innerHTML

поскольку вы обновили свою клиентскую сторону метки, вам понадобится 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);

          }

      }

C# Серверная Функция

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

надеюсь, что это помогает!


вместо 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" />

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

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

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


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

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