我有这样的网络表单和JavaScript函数:
网络表单
<div>
<asp:DropDownList runat="server" ID="ddlType">
<asp:ListItem Value="1" Text="Type1"></asp:ListItem>
<asp:ListItem Value="2" Text="Type2"></asp:ListItem>
</asp:DropDownList>
<asp:LinkButton ID="lnkTest" OnClientClick='<%= "getValue('0' + '|' + 'ddlType.SelectedValue');return false;" %>' runat="server" Text="text">
new
</asp:LinkButton>
</div>
JavaScript功能
<script>
function getValue(Input) {
var result = Input.split("|");
section1 = result[0];
section2 = result[1];
}
</script>
我需要将包含'0'
(硬编码)和ddlType.SelectedValue
的字符串传递给getValue
。
此网络表单语法错误Server tags cannot contain <% ... %> constructs
(我知道)。我可以通过getElementById
获取选定的值,但我希望将SelectedValue
作为参数传递。我阅读了很多帖子,但没有一个帖子没有通过SelectedValue
。
如果有人可以解释这个问题的解决方案,那将非常有用。
答案 0 :(得分:0)
SelectedValue是服务器端值。它在页面加载时(即在页面呈现给用户之前)可用于服务器端代码。在javascript中它根本没有任何意义,并且在用户点击链接时不可用。
如果您想在客户端获取所选值,您可以执行以下操作:
首先删除LinkButton中的所有OnClientClick代码。
其次,写一些像这样的javascript(在页面底部,在你的所有HTML / ASP标记之后:
document.getElementById("<%=lnkTest.ClientID %>").addEventListener("click", function(event) {
event.preventDefault(); //stop default action of the link button, to allow script to execute
var selectedVal = document.getElementById("<%=ddlType.ClientID %>").value;
getValue('0|' + selectedVal);
});
这将导致浏览器监听用户点击按钮,然后运行给定的JS函数。该函数获取当前选定的下拉列表值(在浏览器中选择 - 此时服务器不知道选择了什么,因为没有发生回发)并将选定的值传递给现有的getValue
函数。
N.B。如果你想知道,我使用contruct <%=ddlType.ClientID %>
的原因是因为ASP.NET根据它所在的服务器端控件的结构动态创建每个元素的客户端ID。因此,直接依赖服务器端ID(例如“ddlType”)将无法可靠地识别呈现的DOM中的元素。 .NET在运行时提供ClientID值,以允许我们访问生成的ID。