22

フォームに一連のテキストボックスがあります。ユーザーがこれらのテキストボックスに数値を挿入すると、計算が行われ、<asp:Label>JavaScriptを介してコントロールが更新され、これらの計算が反映されます。

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

これにより、UIが正しく更新されます。ただし、コードビハインドの値にアクセスしようとすると、Textプロパティが空になります。innerHTMLJavaScriptを介してプロパティを更新していたので、これは理にかなっています。

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

コードビハインドでプロパティを読み取れるように、JavaScript経由でTextプロパティを更新するにはどうすればよいですか?<asp:Label>

アップデート

これは、41個のラベルを含む大きなフォームでの小さな問題であり、各ラベルにはユーザーの計算結果が表示されます。FishBasketGordoのアドバイスを受けて、私は自分<asp:Label>を障害者に変えました<asp:TextBox>。新しいテキストボックスの値を次のように設定しています。

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

繰り返しますが、コードビハインドでは、の値TotalLoans.Textは常に「」に等しくなります。


私はこれにアプローチする方法を変更してもかまいませんが、ここに問題の核心があります。

一部のコントロールのプロパティ値を操作するためにJavaScriptを使用しています。[送信]をクリックすると、コードビハインドからこれらの操作された値にアクセスできる必要があります。

私がこれについてどうやって行くことができるかアドバイスはありますか?

アップデート2

@James Johnsonの回答に関しては、.innerText提案されているようにプロパティを使用して値を取得することはできません。EnableViewStateでtrueに設定しました<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。コントロールの更新された値は、コードビハインドで直接使用されている場合はLabel失われます。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

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

ラベルクライアント側を更新したので、サーバー側のコードに変更を反映させるには、ポストバックが必要になります。

これを行う方法がわからない場合は、これが私が過去に行った方法です。

非表示フィールドを作成します。

<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

Asp.net codebehindは最初にサーバー上で実行され、次にページがクライアント(ブラウザー)にレンダリングされます。Codebehindはサーバー上にのみ存在するため、クライアント側(javascript、html)にアクセスできません。

したがって、ajaxを使用し、labelの値をコードビハインドに送信します。を使用するPageMethodsか、codebehindが存在するサーバーにページを投稿するだけで、codebehindは更新された値を知ることができます:)

于 2012-04-12T17:34:05.347 に答える
0

ラベルの情報は、ポストバック時にViewState入力に保存されます(サーバーは、ラベルのテキストを含む、ポストバックされたフォーム値以外のページを認識しないことに注意してください)。クライアント側でそれを更新する必要があります。そのレーベルで何が変わったのかを知ってください。あなたの時間の価値はないと思います。

ここでどのような問題を解決しようとしているのか完全にはわかりませんが、これにより、問題を解決する方法についていくつかのアイデアが得られる可能性があります。

ラベルに合わせて非表示フィールドを作成できます。ラベルを更新するたびに、その値も更新します。次に、背後のコードで、ラベルのTextプロパティをその非表示フィールドにあるものに設定します。 。

于 2012-04-12T17:30:15.240 に答える