如何使用ASP.NET WebForms中的JavaScript从FormView中的DropDownList获取文本到TextBox中?

时间:2018-10-01 17:36:56

标签: javascript c# asp.net

我正在尝试将选定的文本(不是值)从DropDownList放入TextBox中。 DropDownList位于FormView控件的EditITemTemplate中,但TextBox不在。

这是我要使用的js:

<script type="text/javascript">
    function GetDdlText() {
        var fvmode = ('<%=fvPhaudDets.CurrentMode.ToString()%>');
        if (fvmode == "Edit") {
            var ddl = document.getElementById('<%=fvPhaudDets.FindControl("QOpClsCallDdl")%>');
            var txt = document.getElementById("txtbox");
            var selectedText = ddl.options[ddl.selectedIndex].Value;
            txt.Text = selectedText;
            txt.focus();
        }
    }
</script>

这是OnSelectedIndexChanged事件,我在其中调用js:

protected void QOpClsCallTextBox_OnSelectedIndexChanged(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "TheTxt", "GetDdlText();", true);
}

因此,只要在DropDownList中选择了一个新值,选定的文本就应该填充到TextBox中,但是没有值会输入到TextBox中。我缺少什么,或者需要更改什么才能捕获选定的值?

2 个答案:

答案 0 :(得分:1)

以下代码段应该起作用。您的JavaScript代码存在一些问题。主要是使用大写字母以及Webforms和javascript函数的混合。

首先,要找到DDL,您需要ClientID

fvPhaudDets.FindControl("QOpClsCallDdl").ClientID

然后使用正确的JavaScript ddl.options[ddl.selectedIndex].text,而不是.Value 设置文本框文本也是如此。是txt.value = selectedText;,而不是txt.Text

<script type="text/javascript">
    function GetDdlText() {
        var fvmode = ('<%=fvPhaudDets.CurrentMode.ToString()%>');
        if (fvmode == "Edit") {
            var ddl = document.getElementById('<%= fvPhaudDets.FindControl("QOpClsCallDdl").ClientID %>');
            var txt = document.getElementById("txtbox");
            var selectedText = ddl.options[ddl.selectedIndex].text;
            txt.value = selectedText;
            txt.focus();
        }
    }
</script>

更新

要检查FormView是否处于编辑模式,请使用此行

var ddl = document.getElementById('<%= fvPhaudDets.CurrentMode == FormViewMode.Edit ? fvPhaudDets.FindControl("QOpClsCallDdl").ClientID : "" %>');

UPDATE 2(完整的工作示例)

<asp:FormView ID="fvPhaudDets" runat="server">
    <EditItemTemplate>

        <asp:DropDownList ID="QOpClsCallDdl" runat="server" onchange="GetDdlText()">
            <asp:ListItem>aaa</asp:ListItem>
            <asp:ListItem>bbb</asp:ListItem>
            <asp:ListItem>ccc</asp:ListItem>
        </asp:DropDownList>

    </EditItemTemplate>
</asp:FormView>

<input type="text" id="txtbox" />

<script type="text/javascript">
    function GetDdlText() {
        var fvmode = ('<%=fvPhaudDets.CurrentMode.ToString()%>');
        if (fvmode == "Edit") {
            var ddl = document.getElementById('<%= fvPhaudDets.CurrentMode == FormViewMode.Edit ? fvPhaudDets.FindControl("QOpClsCallDdl").ClientID : "" %>');
            var txt = document.getElementById("txtbox");
            var selectedText = ddl.options[ddl.selectedIndex].text;
            txt.value = selectedText;
            txt.focus();
        }
    }
</script>

用于测试的代码

fvPhaudDets.DataSource = new string[1];
fvPhaudDets.ChangeMode(FormViewMode.Edit);
fvPhaudDets.DataBind();

答案 1 :(得分:0)

尝试一下,看看是否有帮助。我认为您遇到的问题是您没有使用

  

ClientID

这与您的代码不完全相同。但是类似。您可以根据需要更改以下代码。

NAME           | TYPE       | CLUSTER-IP  | EXTERNAL-IP  | PORT(S)
---------------|------------|-------------|--------------|------------
app-external   |LoadBalancer|xx.xx.xxx.xxx|xx.xxx.xxx.xxx|80:32014/TCP
---------------|------------|-------------|--------------|------------
kubernetes     | ClusterIP  | xx.xx.xxx.x |    <none>    |   443/TCP