Установите свойство 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 мог знать обновленное значение:)