0

カーソル位置の値を取得するJavaScriptがあり、うまく機能します。その値をasp.netラベルのinnerHtmlプロパティに割り当てています。treeview_selectednodechangeイベントが発生したときに、プログラムでこのinnerHtmlプロパティにアクセスしたいと思います。これはどのように達成できますか?

これは使用しているJavaScriptです:-

function ShowSelection() {
        var txt1 = document.getElementById("MainContent_txtQuery");
        var currentRange = document.selection.createRange();
        var workRange = currentRange.duplicate();
        txt1.select();
        var allRange = document.selection.createRange();
        var len = 0;
        while (workRange.compareEndPoints("StartToStart", allRange) > 0) 
        {
            workRange.moveStart("character", -1);
            len++;
        }
        currentRange.select();
        document.getElementById("MainContent_lblPos").innerHTML = len;
    }

そして、私がそれにアクセスしたい場所は次のとおりです:-

 string[] selectedNode = treeViewTables.SelectedNode.Text.Split('<', '>');

            string pos = lblPos.Text;
            if (selectedNode[2].Equals("Table(s)") || selectedNode[2].Equals("Parameter(s)"))
            {
                return;
            }
            string parentNode = treeViewTables.SelectedNode.Parent.Text;

            if (parentNode.Contains("Table(s)"))
            {
                txtQuery.Text = txtQuery.Text + " " + selectedNode[2];
                txtQuery.Text = RemoveSpaces(txtQuery.Text);
            }
            else if (parentNode.Contains("Parameter"))
            {
                //if (txtQuery.Text != "")
                if (lblPos.Text == string.Empty)
                {
                    if (txtQuery.Text.Length == 0)
                    {
                        txtQuery.Text = selectedNode[2];
                    }
                    else if (txtQuery.Text[txtQuery.Text.Length - 1] != ',')
                    {
                        txtQuery.Text = txtQuery.Text + " " + "'" + selectedNode[2] + "'";
                        txtQuery.Text = RemoveSpaces(txtQuery.Text);
                    }
                    else
                    {
                        txtQuery.Text = txtQuery.Text + " " + selectedNode[2];
                        txtQuery.Text = RemoveSpaces(txtQuery.Text);
                    }
                }

            }
            else
            {
                txtQuery.Text = txtQuery.Text + " " + selectedNode[2] + ",";
                txtQuery.Text = RemoveSpaces(txtQuery.Text);
            }
            TreeNode nodeSelected = treeViewTables.Nodes[0];
            nodeSelected.Select();

助けてください。

ありがとうございました

4

3 に答える 3

2

DOM要素はサーバーへのラウンドトリップではなく、フォーム要素のみです。ラベルでサーバーにアクセスできるのは、サーバーに設定されているものだけです。

やりたいことを行うには、非表示フィールドを作成し、その値を座標に設定して、ポストバック時にサーバーに到達するようにする必要があります。

于 2012-06-08T14:36:22.823 に答える
2

ラベルのコンテンツ(クライアント側のスパン)がサーバーにポストバックされることはありません。

を追加し、<asp:HiddenField>クライアント側でその値を設定すると同時に、ラベルのinnerHtmlを変更します。この値はサーバー側で自動的に利用可能になります。

于 2012-06-08T14:37:50.057 に答える
2

私が正しく理解している場合は、JavaScriptでラベルコントロールのコンテンツを設定してから、C#を使用してASP.NETでサーバー側にアクセスしようとしていますか?

それがあなたがやろうとしていることであるならば、ラベルコントロールがHTMLスパン要素としてレンダリングされ、フォーム要素ではないので、あなたはそれをすることができません。フォーム要素のみがポストバック(完全または部分的)でサーバーに返送されます。同じ値を非表示フィールドに設定してサーバー側にアクセスするか、AJAX呼び出しを使用してサーバーに戻すことができます。

また、JavaScriptでレンダリングされたクライアントIDを直接参照することはおそらく良い考えではありません。すなわち。それよりも

document.getElementById( "MainContent_txtQuery")

あなたはより安全になるでしょう

document.getElementById( "<%= txtQuery.ClientID%>")

于 2012-06-08T14:38:04.567 に答える