在 c# 中以编程方式访问 asp.net Label 的值 innerHtml 值

Access the value innerHtml value of asp.net Label programmatically in c#

本文关键字:Label net 的值 innerHtml asp 访问 编程 方式      更新时间:2023-09-26

>我有一个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();

请帮忙。

谢谢

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

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

DOM 元素不会往返服务器,只会传递表单元素。您唯一能够在服务器上的标签中访问的是服务器上设置的内容。

为了执行所需的操作,您需要创建一个 Hidden 字段并将其值设置为坐标,以便它在回发时到达服务器。

如果我

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

如果这是您要尝试执行的操作,则无法执行此操作,因为标签控件呈现为 HTML span 元素,而不是表单元素。 只有表单元素在回发(完整或部分)时发送回服务器。 您可以将相同的值设置为隐藏字段并访问它在服务器端,也可以使用 AJAX 调用将其传递回服务器。

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

document.getElementById("MainContent_txtQuery")

你会更安全

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