2

私は2つのコントロールを持っていますasp:HiddenField

  <asp:HiddenField runat="server" ID="tabTitle" />
  <asp:HiddenField runat="server" ID="tabMenu" />

と呼ばれるページでこの制御ロードAlarms

ページ上のコントロールは次のalarmsようになります

     <alarm:SubscriptionPanel ID="pnlSubscription" runat="server" />

私がやろうとしているのは、ページalarmsからに値を渡すcontrol hidden fieldsことです。制御コードの背後には、隠しフィールドの値を読み取る関数があります

質問は、コントロールの非表示フィールドに JavaScript の値を渡す方法です。on page load

前もって感謝します

4

3 に答える 3

4

このようにJQueryを使用できます

例 :

$("input[type=hidden][id='<%=tabTitle.ClientID%>']").val("Hello World"); 
$("input[type=hidden][id='<%=tabMenu.ClientID%>']").val("Hello World"); 
于 2012-07-31T19:15:09.157 に答える
2

@Icarusによってコメントされたアプローチに加えて、コントロールからJavaScript関数を公開することができます。

その中で使用する場合に直面する問題は、ページにClientIDMode=Static1つのコントロールのみを追加するように制限されalarm:SubscriptionPanelます

各ページで1つのコントロールのみを使用することを計画している場合、最も簡単なアプローチは@Icarusによってコメントされたものですが、私はそれを一時的なアプローチと見なします

この代替手段は、カスタムコントロール内で、実際に属するロジックをカプセル化します。

出力

ここに画像の説明を入力してください

ASCX

<div id="<%: this.ClientID %>">
    <asp:HiddenField runat="server" ID="hidden1" Value="one" />
    <asp:HiddenField runat="server" ID="hidden2" />
    <asp:Button Text="Post me" runat="server" OnClick="postme_Click" />
    <asp:Label runat="server" ID="lbl"></asp:Label>
    <script type="text/javascript">
        $(function () {
            var myObj = {
                setHidden1: function (myValue) {
                    $("#<%: this.hidden1.ClientID %>").val(myValue);
                },
                getHidden1: function () {
                    return $("#<%: this.hidden1.ClientID %>").val();
                },
                helloWorld: function () {
                    alert("hellow world");
                }
            };
            $("#<%: this.ClientID %>").data("data", myObj);
        });
    </script>
</div>

背後にあるASCXコード

    protected void postme_Click(object sender, EventArgs e)
    {
        this.lbl.Text = "Posted: " + this.hidden1.Value;
    }

ASPX

    <script type="text/javascript">
        $(function () {
            $("#myPageButton").click(function () {
                $("#<%: this.myControl.ClientID %>").data("data").setHidden1("plop");
                $("#<%: this.myControl2.ClientID %>").data("data").setHidden1("plop2");
            });
        });
    </script>
    <input type="button" id="myPageButton" value="Set Hidden value" />
    <uc1:EncapsulateJavaScriptLogicInUserControl ID="myControl" 
        runat="server" />
    <uc1:EncapsulateJavaScriptLogicInUserControl ID="myControl2" 
        runat="server" />
    <uc1:EncapsulateJavaScriptLogicInUserControl ID="myControl3" 
        runat="server" />

別の方法を見つけました。これはさらにオブジェクト指向に見えますが、MicrosoftAJAXライブラリを使用する必要があります。

ASCX

変化する:$("#<%: this.ClientID %>").data("data", myObj);

の中へ:$.extend($get("<%: this.ClientID %>"), myObj);

ASPX

変化する:

$("#<%: this.myControl.ClientID %>").data("data").setHidden1("plop");
$("#<%: this.myControl2.ClientID %>").data("data").setHidden1("plop2");

の中へ:

$get("<%: this.myControl.ClientID %>").setHidden1("plop");
$get("<%: this.myControl2.ClientID %>").setHidden1("plop2");

このアプローチでは、.datajQuery関数の使用を削除します

于 2012-07-31T22:17:03.330 に答える
2

ASP.NET 4.0 を使用している場合はClientIDMode、これらのコントロールのプロパティを静的に設定し、javascript を使用してプレーンな ol' を使用して非表示の要素を設定することをお勧めしますdocument.getElementById()。このようなもの:

<asp:HiddenField runat="server" ID="tabTitle" ClientIDMode="Static" />


//since the id mode in the hidden element is static; 
//you should be able to do this safely:
document.getElementById('tabTitle').value = myvalue;

ASP.NET 4.0 を使用していない場合。ここでは jQuery が役立ちます。HatSoft が回答で示したように、部分一致を使用して要素を見つけることができますが、わずかな違いがあります。

$("input[type=hidden][id*='tabTitle']").val("Hello World");

部分に注意してくださいid*=。これは、id に単語が含まれるすべての入力要素を取得します。tabTitle

于 2012-07-31T19:19:22.830 に答える