将选定值服务器端下拉列表传递给javascript函数

时间:2016-09-21 10:17:29

标签: javascript asp.net

我有这样的网络表单和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

如果有人可以解释这个问题的解决方案,那将非常有用。

1 个答案:

答案 0 :(得分:0)

SelectedValue是服务器端值。它在页面加载时(即在页面呈现给用户之前)可用于服务器端代码。在javascript中它根本没有任何意义,并且在用户点击链接时不可用。

如果您想在客户端获取所选值,您可以执行以下操作:

首先删除LinkBut​​ton中的所有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。