我编写了一个检查唯一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;
}
}
我的文件上传也在更新面板中,在上传时丢失了文件。建议我实现此功能的任何替代方法...... 感谢
答案 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以哪种形式存在。这将消除使用脚本管理器和更新面板的需要。