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

标签的内容(客户端的跨度)永远不会被发回服务器。

在客户端添加一个<asp:HiddenField>并设置其值,同时更改标签的innerHtml。该值将在服务器端自动可用。

于 2012-06-08T14:37:50.057 回答
2

如果我理解正确,您正在尝试在 javascript 中设置标签控件的内容,然后使用 C# 在 ASP.NET 中访问它的服务器端?

如果这是您想要做的,您将无法做到这一点,因为标签控件呈现为 HTML 跨度元素,而不是表单元素。只有表单元素在回发(全部或部分)时被发送回服务器。您可以将相同的值设置为隐藏字段并在服务器端访问它,或者您可以使用 AJAX 调用将其传递回服务器。

此外,直接在 javascript 中引用呈现的客户端 ID 可能不是一个好主意。IE。而不是

document.getElementById("MainContent_txtQuery")

你会更安全

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

于 2012-06-08T14:38:04.567 回答
2

DOM 元素不会往返于服务器,只有表单元素。您可以在标签中的服务器上访问的唯一内容是服务器上设置的内容。

为了做你想做的事,你需要创建一个隐藏字段并将它的值设置为你的坐标,这样它就会在回发时到达服务器。

于 2012-06-08T14:36:22.823 回答