要求:在用户控件内(.ascx),创建省市级联菜单,把选择的省市的值分别赋给旁边的文本框。只能在用户控件内写代码。不能在后台。  相关代码如下,注意这是用户控件代码,不能有form.(也可以选择数据库做。有具体的省市表,但是不能有回传,因为回传会清空密码。)
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="regmem_diy_memadd.ascx.cs" Inherits="kyecomnet.esite_sitemanage_regmem_diy_memadd" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<script language="javascript">
var shName;
function testSheng(value,name)
{
shName=name;
alert(shName);
document.bill_province.Text = name;
}
</script>
<table>
<tr>
<td class="s9back" align="center" style="WIDTH: 106px">会员帐号:</td>
<td class="s9back" align="left"><asp:TextBox MaxLength="18" Width="95px"  id="bill_loginname"  runat="server"/>
*</td>
</tr>
<tr>
<td class="s9back" align="center" style="WIDTH: 106px">会员密码:</td>
<td class="s9back" align="left"><asp:TextBox MaxLength="10" Width="95px" textmode="password" id="bill_password" runat="server"/>*</td>
</tr>
<tr>
<td class="s9back" align="center" style="WIDTH: 106px">重复密码:</td>
<td class="s9back" align="left"><asp:TextBox MaxLength="10" Width="95px" textmode="password" id="bill_password2"  runat="server"/>*</td>
</tr>
<tr>
<td class="s9back" align="center" style="WIDTH: 106px">省份:</td>
<td class="s9back" align="left" >
<asp:DropDownList id="ddlSheng"  runat="server" onChange="testSheng(this.options[this.selectedIndex].value,this.options[this.selectedIndex].text);" ></asp:DropDownList>
<asp:TextBox MaxLength="20" Width="95px"  id="bill_province"  runat="server" visible="true" />*</td> </tr>
         <tr>
<td class="s9back" align="center" style="WIDTH: 106px">城市:</td>
<td class="s9back" align="left"><asp:DropDownList id="ddlCity"  runat="server" ></asp:DropDownList>
<asp:TextBox MaxLength="20" Width="95px"  id="bill_city"  runat="server" visible= "true"/>*</td>
</tr>
</table>

解决方案 »

  1.   


    看来你没有使用过asp.net ajax的基本的UpdataPanel控件,否则就不会说“回传会清空密码”这话。
      

  2.   

    单独给你写了一个demo。在你的网站中创建一个aspx后缀的文件,把下面内容覆盖到文件里,测试一下:<%@ Page Language="C#" %><script runat="server">
        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            if ("[abcd],[1234]".IndexOf("[" + this.TextBox1.Text + "]") < 0)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), this.GetHashCode().ToString(),
                   "alert('用户名输入错误!');", true);
                this.TextBox1.Focus();
            }
            else
                this.TextBox2.Focus();
        }    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.DropDownList2.Items.Clear();
            switch (this.DropDownList1.SelectedValue)
            {
                case "香港":
                    this.DropDownList2.Items.Add("迪士尼");
                    this.DropDownList2.Items.Add("维多利亚港");
                    break;
                case "北京":
                    this.DropDownList2.Items.Add("京剧");
                    this.DropDownList2.Items.Add("相声");
                    this.DropDownList2.Items.Add("茶馆");
                    this.DropDownList2.Items.Add("胡同");
                    break;
            }
        }    protected void Button1_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "", "alert('" +
                this.TextBox2.Text.Replace("'", "\\'") + "," + this.DropDownList2.SelectedValue + "');", true);
        }
    </script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <table>
            <tr>
                <td>
                    用户名(abcd、1234)
                </td>
                <td>
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" />
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </td>
            </tr>
            <tr>
                <td>
                    输入密码
                </td>
                <td>
                    <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </td>
            </tr>
            <tr>
                <td>
                    请选择
                </td>
                <td>
                    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                        <ContentTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                                <asp:ListItem></asp:ListItem>
                                <asp:ListItem>北京</asp:ListItem>
                                <asp:ListItem>香港</asp:ListItem>
                            </asp:DropDownList>
                            <asp:DropDownList ID="DropDownList2" runat="server">
                            </asp:DropDownList>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
                </td>
            </tr>
        </table>
        </form>
    </body>
    </html>
      

  3.   

    你可以把那个<table />的内容以及后台代码写在ascx文件中,没有任何问题。
      

  4.   

    嗯,我又看了一下代码。实际上我写的代码中你可以删除密码文本框TextBox2外边的UpdatePanel,因为它用不到。当然不删除也没有任何错误。
      

  5.   


    刚散过:http://topic.csdn.net/u/20090916/10/e484fbe1-2e0f-420c-bf18-c41409f4e963.html等我有其它好的东西玩过之后,再分享之。
      

  6.   


    sp1234散分一般是以技术普及宣传贴的模式进行。你应该关注那些没什么人看得懂的帖子,这就意味着你能多接点分。早几年sp1234还没有达到万人迷这一层度的时候,你也许一次性可以在他那接上几十甚至上百分。现在不一样了,他的帖子想正常结贴都困难,还指望接分?小弟你还是都答题吧,也好多买几条短裤换着穿。