Установите свойство Text метки asp: в Javascript ПРАВИЛЬНО

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

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

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

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

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

Update

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

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

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


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

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

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

Update 2

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

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

 splatto12 апр. 2012 г., 20:31
Спасибо FishBasketGordo, пожалуйста, смотрите обновление
 Greg12 апр. 2012 г., 19:21
Это может быть невозможно, потому чтоasp:Label не является типом<input>, Мне кажется, что я сталкивался с этим раньше, и мне пришлось использовать скрытые входные данные, чтобы сервер мог его распознать.
 Khan12 апр. 2012 г., 19:22
То, что вы делаете, будет работать после обратной передачи. Asp.net/Server не знает, изменилось ли что-нибудь, пока у него не будет другого шанса посмотреть на это.
 James Johnson12 апр. 2012 г., 21:19
@ Splatto: обновил мой ответ. Я думаю, что нашел хорошее решение для вас.
 FishBasketGordo12 апр. 2012 г., 19:38
Хотя вы могли бы заставить их работать,<asp:Label> средства управления не являются действительно правильным выбором для того, что вы делаете. Я хотел бы рассмотреть возможность использования текстового поля только для чтения или что-то более семантически подходящее.

Ответы на вопрос(7)

Решение Вопроса
Place HiddenField Control in your Form.
<asp:HiddenField ID="hidden" runat="server" />
Create a Property in the Form
protected String LabelProperty
{
    get
    {
        return hidden.Value;
    }
    set
    {
        hidden.Value = value;
    }
}
Update the Hidden Field value from JavaScript
<script>
   function UpdateControl() {
            document.getElementById('<%=hidden.ClientID %>').value = '12';
   }
</script>

Postback,Label Обновленное значение элемента управления будет потеряно черезPostBack в случае, если он используется непосредственно в коде позади.

 splatto12 апр. 2012 г., 20:39
@ Джеймс Джонсон, я пытался опубликовать это в вашем ответе. Я не могу получить значение, используя свойство .innerText. я имеюEnableViewState установить в true на<asp:Label>, Есть что-то еще, что я пропускаю?
 17 апр. 2015 г., 20:55
Это решение прекрасно работает. Однако на самом деле выбор скрытого поля ASP.NET может быть проблемой с внешним файлом JavaScript и jQuery.This answer есть решение для этого.
 12 апр. 2012 г., 20:44
@PankajGarg: Вы были на самом деле правы. Я думал, что значение может быть сохранено в атрибуте метки, но это не так.
 12 апр. 2012 г., 20:41
Я не могу получить доступ к обновленному значению Label черезPostback как это будет потеряно при обратной передаче. Итак, мне нужно использоватьViewState/HiddenField Контроль.
 12 апр. 2012 г., 20:51
@John: я действительно ошибся в отношении ярлыка, но, поскольку я нахожусь в числе лучших 0,001% пользователей ASP.NET на сайте, я не думаю, что будет справедливо сказать, что я не понимаю ASP .СЕТЬ. Я ценю ваш комментарий, хотя :)

вам понадобится обратный ответ, чтобы код на стороне сервера отражал изменения.

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

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

<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"];
}

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

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

Java Script

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

C #

sptext.innerHTML
 01 авг. 2016 г., 10:04
Правильный синтаксис: ---- document.getElementById (& quot; & lt;% = sptext.ClientID% & gt; & quot;). InnerHTML = & quot; изменить текст & quot ;;

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

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

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

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

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

 function changeEmaillbl() {


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

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" />
 17 апр. 2015 г., 20:50
Хотя это решает проблему ОП, оно вызывает другую. Ввод текста может быть выбран мышью. Это создает видимость того, что поле можно обновить. Затем, если нажата кнопка возврата, IE переходит на предыдущую страницу. Прощание с данными, которые были в форме.

Ваш ответ на вопрос