22

我在表单上有一系列文本框。当用户在这些文本框中插入数字时,会进行计算并<asp:Label>通过 JavaScript 更新控件以反映这些计算:

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

这会正确更新 UI。但是,当我尝试访问代码隐藏中的值时,该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);

如何以可以读取代码隐藏中的属性的方式更新 via JavaScript 的属性Text<asp:Label>

更新

这是包含 41 个标签的大型表单上的一个小问题,每个标签都为用户显示一些计算的结果。听从 FishBasketGordo 的建议,我把我<asp:Label>的变成了残疾人<asp:TextBox>。我正在设置新文本框的值,如下所示:

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

同样,在代码隐藏中, 的值TotalLoans.Text始终等于“”。


我不介意改变我的处理方式,但这就是问题的症结所在。

我正在使用 JavaScript 来操作某些控件的属性值。单击“提交”时,我需要能够从后面的代码中访问这些操作值。

有什么建议我该怎么做?

更新 2

关于@James Johnson 的回答,我无法.innerText按照建议使用属性检索值。我已经EnableViewState<asp:Label>. 还有什么我想念的吗?

我不明白为什么,当我输入文本框并提交表单时,我可以访问代码隐藏中的值,但是当我通过 JavaScript 以编程方式更改文本框或标签的文本时,我无法访问新值.

4

7 回答 7

16

将 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. 如果直接在后面的代码中使用LabelControl 更新的值,它将丢失。PostBack

于 2012-04-12T17:53:35.690 回答
4

这个适用于我的 asp 标签控件。

 function changeEmaillbl() {


         if (document.getElementById('<%=rbAgency.ClientID%>').checked = true) {
             document.getElementById('<%=lblUsername.ClientID%>').innerHTML = 'Accredited No.:';
         } 
     }
于 2015-09-15T05:22:39.157 回答
2

使用以下代码

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

Java 脚本

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

C#

sptext.innerHTML
于 2012-05-08T09:38:54.540 回答
1

由于您已更新标签客户端,因此您需要回发以便您的服务器端代码反映更改。

如果你不知道怎么做,这就是我过去的做法。

创建一个隐藏字段:

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

希望这可以帮助!

于 2012-04-12T17:26:02.010 回答
1

而不是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" />
于 2012-04-12T17:21:01.603 回答
1

Asp.net 代码隐藏首先在服务器上运行,然后页面呈现给客户端(浏览器)。Codebehind 无法访问客户端(javascript、html),因为它只存在于服务器上。

因此,要么使用 ajax 并将标签的值发送到后面的代码。您可以使用PageMethods,或者只是将页面发布到代码隐藏所在的服务器,因此代码隐藏可以知道更新的值:)

于 2012-04-12T17:34:05.347 回答
0

标签的信息存储在回发时的 ViewState 输入中(请记住,服务器对回发的表单值之外的页面一无所知,其中包括标签的文本)..您必须以某种方式在客户端将其更新为知道那个标签发生了什么变化,我猜这不值得你花时间。

我不完全确定您要在这里解决什么问题,但这可能会给您一些关于如何解决的想法:

您可以创建一个隐藏字段来与您的标签一起使用,并且每当您更新标签时,您也会更新该值。然后在后面的代码中将标签的 Text 属性设置为该隐藏字段中的内容.

于 2012-04-12T17:30:15.240 回答