asp.net面板控件可见性问题

时间:2014-04-24 06:50:13

标签: c# asp.net

我编写了一个检查唯一ID可用性状态的代码。如果ID可用,则应该使面板可见,否则隐藏面板可见性。但它没有用。如果我在页面加载中将面板可见性设置为false它可以工作..但是文本框的文本更改事件中的面板可见性代码不起作用。在我的视图页面中,脚本管理器用于更新更新面板内的内容。我做错了什么。

<asp:ScriptManager ID="scriptmanager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="PnlUsrDetails" runat="server">
   <ContentTemplate>
     <table>
       <tr>
           Enter unique no: <asp:TextBox ID="txtUniqueNo" runat="server" AutoPostBack="true" ontextchanged="txtUniqueNo_TextChanged"/>      
       </tr>
       <tr>
           <div id="checkusername" runat="server"  Visible="false">
              <asp:Image ID="imgstatus" runat="server" Width="17px" Height="17px"/>
              <asp:Label ID="lblStatus" runat="server"></asp:Label>
           </div>
       </tr>
     </table>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:Panel ID="Panel1" runat="server">
          <div>Panel content</div>
</asp:Panel>

服务器端代码:

protected void Page_Load(object sender, EventArgs e)
{

    if (!this.Page.IsPostBack)
    {
        Panel1.Visible = false; 
        PopulateCategory();
        getSubCategories(CategoryDropDownList.SelectedValue);
        //CategoryDropDownList_SelectedIndexChanged(null, null);
    }
}

protected void txtUniqueNo_TextChanged(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(txtUniqueNo.Text))
    {
        OdbcConnection conn = new OdbcConnection(DB.DatabaseConnString());
        if (conn.State == ConnectionState.Open)
            conn.Close();
        conn.Open();
        OdbcCommand cmd = new OdbcCommand("select * from gallery where unique_no='" + txtUniqueNo.Text + "'", conn);

        OdbcDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            checkusername.Visible = true;
            Panel1.Visible = false;
            imgstatus.ImageUrl = "~/images/unavailable.png";
            lblStatus.Text = "Unique Id Already Taken";

        }
        else
        {
            try
            {
                checkusername.Visible = true;
                Panel1.Visible = true;
                imgstatus.ImageUrl = "~/images/tick.png";
                lblStatus.Text = "Unique Id  Available";
            }
            catch (Exception ex)
            {
                string mess = ex.Message;
            }

        }
    }
    else
    {
        checkusername.Visible = false;
    }
}

我的文件上传也在更新面板中,在上传时丢失了文件。建议我实现此功能的任何替代方法...... 感谢

2 个答案:

答案 0 :(得分:2)

可能原因导致Control未呈现(visible = false),之前没有保存viewstate。 尝试隐藏并使用样式显示它:

首先:

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!this.Page.IsPostBack)
        {
            //Panel1.Visible = false; Comment
            PopulateCategory();
            getSubCategories(CategoryDropDownList.SelectedValue);
            //CategoryDropDownList_SelectedIndexChanged(null, null);
        }
    }


protected void txtUniqueNo_TextChanged(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(txtUniqueNo.Text))
    {
        OdbcConnection conn = new OdbcConnection(DB.DatabaseConnString());
        if (conn.State == ConnectionState.Open)
            conn.Close();
        conn.Open();
        OdbcCommand cmd = new OdbcCommand("select * from gallery where unique_no='" + txtUniqueNo.Text + "'", conn);

        OdbcDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            checkusername.Visible = true;
           Panel1.Style.Add("display", "none");
            imgstatus.ImageUrl = "~/images/unavailable.png";
            lblStatus.Text = "Unique Id Already Taken";

        }
        else
        {
            try
            {
                checkusername.Visible = true;
                Panel1.Style.Add("display", "block");
                imgstatus.ImageUrl = "~/images/tick.png";
                lblStatus.Text = "Unique Id  Available";
            }
            catch (Exception ex)
            {
                string mess = ex.Message;
            }

        }
    }
    else
    {
        checkusername.Visible = false;
    }
}

答案 1 :(得分:0)

文件上传控件在更新面板中不起作用,在这种情况下,它将丢失所选文件。因为您已经要求替代方法。一种方法是使用jquery检查唯一无可用性。以下是检查用户名可用性的完美工作链接Check-UserName-Availability-jquery。使用此示例检查唯一编号 Ajax有成功和错误方法,因此您可以将表单放在具有唯一ID的div中,并在ajax结果上切换其可见性。 Upoo成功的ajax你可以显示你的div以哪种形式存在。这将消除使用脚本管理器和更新面板的需要。