【问题标题】:How to get client side value from server side using VB.NET?如何使用 VB.NET 从服务器端获取客户端值?
【发布时间】:2021-05-06 02:05:18
【问题描述】:

我有一个 ASPX 页面,我在其中使用 JS 设置数据,但我在尝试从 VB 获取这些数据时遇到了麻烦。 这是我所拥有的简化版本...

ASPX:

<body onload="DoStuff();">
<script>
    function DoStuff() {
        var myvalue = document.getElementById('lblValue');
        myvalue.textContent = "blah";
        console.log (myvalue.textContent); // just to be sure that the value IS there
    }
</script>

<div style="display:block">
    <asp:label id="lblText" visible="true" runat="server">Text: </asp:label><asp:label id="lblValue" runat="server" visible="true" ></asp:label><br /><br />
    <asp:label id="lblMsg" visible="true" runat="server" >Message: </asp:label><asp:label id="lblMsgValue" runat="server" visible="true" >Click button...</asp:label><br /><br />
    <asp:Button id="btnGo" Text="Go" OnClick="btnGo_Click" runat="server"/>
</div>
</body>

ASPX.VB:

Protected Sub btnGo_Click(sender As Object, e As EventArgs)
    lblMsgValue.Text = "The value is *" & lblValue.Text & "*"
End Sub

我总是一无所获。有什么想法吗?

【问题讨论】:

  • 因为从服务器端的角度来看,asp:Label 是只读元素。你需要一个文本框或类似的东西。
  • 实际上,从服务器的角度来看,asp:label 更像是一个 write 元素。只有表单元素(输入、选择)作为 POST HTTP 请求传回服务器。
  • 是的,这就是问题所在。我想使用标签,因为它的可见性可以帮助调试页面。无论如何,我用一个隐藏字段 ASPX 控件替换了它,它成功了。谢谢!

标签: javascript asp.net vb.net


【解决方案1】:

多么有趣。我从来没有注意到标签集客户端不会持续存在。

请注意,如果您使用后面的代码,请设置一个 label.Text,然后该标签确实会持续存在并在往返过程中存活下来。但是,在JS中设置标签?好吧,您会立即看到浏览器更新,但是当您回帖时,您会丢失该文本。

这意味着您需要使用一个文本框 - 它们确实会持续存在,即使在客户端更改时也是如此。

所以,例如这段代码:

        <asp:Button ID="Button2" runat="server" 
              Text="Js Code" Width="114px" 
              OnClientClick="setlabel();return false" />
        <br />

     <asp:Label ID="Label1" runat="server" Text="a" ClientIDMode="Static" ViewStateMode="Enabled"></asp:Label>
        <br />
        <asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox>

        <script>
            function setlabel() {

                vlable = document.getElementById("Label1");
                vlable.innerHTML = 'Hello how are you';

                vtextBox = document.getElementById("TextBox1")
                vtextBox.value = "Js setup text box"

            }

        </script>

所以,在我们运行上面的按钮(js)之后,文本框和标签都会更新,你可以在浏览器中看到结果。

但是,现在插入另一个按钮,如下所示:

        <asp:Button ID="Button1" runat="server" Height="26px" Text="Set Lable" Width="129px" />

以及后面的代码:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Debug.Print(Label1.Text)
    Debug.Print("Text box = " & TextBox1.Text)

End Sub

输出(运行客户端js按钮后)。

a
Text box = Js setup text box

所以我们看到标签的 Text="a",虽然它在浏览器中确实发生了变化,但当我们回发时,它在更改客户端时无法生存。

如前所述,如果后面的代码更改了标签 - 它确实会持续存在,并且会在旅行期间存活下来。但标签没有。

但是,文本框或隐藏字段以及大多数显示/能够保存数据或值的控件将继续存在 - 标签不是这些控件之一。

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 2012-10-31
    • 2015-05-11
    • 1970-01-01
    • 2014-12-29
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多