下拉框中的内容消失 应用了母版页,一点击按钮,下拉框中的项目就消失了不知道是怎么回事。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看click的代码和pageload的代码吧 内容页 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { BindDropDownList(); //DataSet ds = new DataSet(); if (!string.IsNullOrEmpty(UserName)) { //进入编辑状态 user = userbll.GetUser(UserName); if (user != null) { txtUserName.Text = user.UserName; txtUserName.ReadOnly = true; txtPosition.Text = user.Position; txtRe.Text = user.Re; drpRight.SelectedValue = user.RoleID.ToString(); btnApply.Text = "更新"; } } else { txtUserName.ReadOnly = false; btnApply.Text = "添加"; } } } /// <summary> /// 绑定权限下拉框 /// </summary> protected void BindDropDownList() { drpRight.Items.Clear(); drpRight.Items.Add(new ListItem("请选择角色", "0")); DataSet ds = rolebll.GetSysRole(""); if (ds.Tables.Count != 0) { if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { drpRight.Items.Add(new ListItem(ds.Tables[0].Rows[i]["RoleName"].ToString(), ds.Tables[0].Rows[i]["RoleID"].ToString())); } } } }模板页和一个用户控件里的Page_Load里面都没有内容拿出内容页作为一个单独页面,不放在Content里面是不会出现这个问题的。.aspx<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <div class="ManageLine"> <span class="ManageLineTitle">登录用户名:</span><span class="ManageLineInput"> <asp:TextBox ID="txtUserName" runat="server" MaxLength="20"></asp:TextBox></span><span class="ManageLineDesc"><asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUserName" Display="Dynamic" ErrorMessage="登录用户名不能为空!"></asp:RequiredFieldValidator>只能填写20位以内的英文字母以及0-9的数字。</span> <div class="clear"> </div> </div> <div class="ManageLine"> <span class="ManageLineTitle">权限:</span><span class="ManageLineInput"><asp:DropDownList ID="drpRight" runat="server"> </asp:DropDownList></span><span class="ManageLineDesc">选择权限</span><div class="clear"> </div> </div> <div class="ManageLine"> <span class="ManageLineTitle">职务:</span><span class="ManageLineInput"> <asp:TextBox ID="txtPosition" runat="server" MaxLength="20"></asp:TextBox></span><span class="ManageLineDesc"><asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtPosition" Display="Dynamic" ErrorMessage="职务不能为空!"></asp:RequiredFieldValidator>只能填写20位以内的英文字母以及0-9的数字。</span> <div class="clear"> </div> </div> <div class="ManageLine"> <span class="ManageLineTitle">描述:</span><span class="ManageLineInput"> <asp:TextBox ID="txtRe" runat="server" MaxLength="100" TextMode="multiLine" Rows="3"> </asp:TextBox></span><span class="ManageLineDesc">最多100个文字</span><div class="clear"> </div> </div> <div class="ManageSub"> <asp:Button ID="btnApply" runat="server" CausesValidation="True" CssClass="Button01" Text="提交" onclick="btnApply_Click"></asp:Button> <asp:Button ID="btnCancel" runat="server" CausesValidation="False" CssClass="Button01" Text="取消"></asp:Button></div> <asp:Label ID="lblTest" runat="server"></asp:Label> </ContentTemplate> </asp:UpdatePanel> 这个我调试过多次了,单独将这部分拿到一个页面中调试过,就是不放在模板页中,是不会有问题的。放在模板页中的话就有问题,调试时发现它会执行MasterPage的Page_Load以及自定义控件里的Page_Load。不知道除了DropdownList1.Items.Clear()的话,还有什么情况会导致下拉框的记录消失呢? 点击按钮会重新刷新页面的代码在这里面,你重新刷新是不执行的,if (!Page.IsPostBack) { 代码; }把 BindDropDownList(); 这句放你按钮点击事件里就可以了 取完值在绑定啊BindDropDownList();把这个放到按钮点击事件最后 在PAGE标记中将:EnableViewState="true"设为真试下 if (!Page.IsPostBack) { BindDropDownList(); } protected void Button1_Click(object sender, EventArgs e) { 代码.... BindDropDownList(); } 现在我是根本取不到值。 #region 提交 protected void btnApply_Click(object sender, EventArgs e) { if (UserName.Length != 0) { user = userbll.GetUser(UserName); } user.UserName = Strings.SqlFilterString(txtUserName.Text.ToString().Trim()); user.RoleID = Convert.ToInt32(drpRight.SelectedValue.ToString()); //这一句就会提示报错,说未将对象引用到实例,说明根本取不到值 user.Position = Strings.SqlFilterString(txtPosition.Text.ToString().Trim()); user.Re = Strings.SqlFilterString(txtRe.Text.ToString().Trim()); if (btnApply.Text == "添加") //添加帐户 { user.Password = MD5.ToMD5("0000"); if (userbll.InsertUser(user)) { Show("添加成功!"); } } else //编辑帐户 { if (userbll.UpdateUser(user)) { Show("修改成功!"); } } } #endregion而且正常情况下,你在第一次进入页面if(!Page.IsPostBack)里绑定了下拉框数据后,如果没有做DropDownList.Items.Clear()是不会消失的,就好像GridView一样,你进入页面时将它绑定,难道之后你点一次按钮就要绑定一次,不绑定它就会消失吗?不会的。。 肯定是没写IF(!POSTBACK){ }这样也会清除数据 其实这一块单独提出来是可以使用的,就是不知道为什么放到MasterPage里一点按钮下拉框中的项目就没有了。大家有没有碰到类似的情况? protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Edit") { } if (e.CommandName == "Delete") { } } <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" CssClass="aa06" Width="100%" GridLines="None" AllowSorting="True" DataKeyNames="NodeID" onrowcommand="GridView1_RowCommand"> <Columns> <asp:BoundField DataField="NodeID" HeaderText="节点编号"/> <asp:BoundField DataField="NodeName" HeaderText="节点名称"/> <asp:BoundField DataField="Position" HeaderText="处理人" /> <asp:BoundField DataField="DealWay" HeaderText="处理方式" /> <asp:BoundField DataField="Re" HeaderText="备注" /> <asp:TemplateField HeaderText="操作" ShowHeader="False"> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%#Eval("NodeID") %>' Text="编辑" CommandName="Edit"></asp:LinkButton> <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandArgument='<%#Eval("NodeID") %>' Text="删除" CommandName="Delete" OnClientClick="是否确认删除!"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> <PagerSettings Visible="False" /> <HeaderStyle CssClass="listTitle" HorizontalAlign="Left" /> <AlternatingRowStyle CssClass="list01" />以上代码,为何点击GridView一行中的编辑按钮,不跳到后台的RowCommand方法中,反而GridView消失了? RadioButtonList、CheckBoxList都取不到值。。晕了!~~ 解决了!~~下了几个别人写的程序反复对照才发现是EnableViewState这个属性值设为了false的问题。。实在是水平太差,对这个不怎么了解。上面有朋友回复谈到了这方面也没有认真琢磨,搞得自己莫名奇妙了好几天。实在感谢各位的回答,谢谢! 没有任何编译错误,为什么Gridview不显示值呢? asp.net中cookie的用法 怎么给web用户控件赋值? 我想租个虚拟主机 北京机房的 大家给推荐推荐 方法内的存储过程参数传递 asp.net 小问题 快速解决的简单问题! 急!!!为什么我自定义的类对象无法存在ViewState中? 调试错误! 如何用vs.net自动生成控件的事件(c#) 如何获取母版页公共属性 急~~.net匿名验证问题
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindDropDownList();
//DataSet ds = new DataSet();
if (!string.IsNullOrEmpty(UserName))
{ //进入编辑状态
user = userbll.GetUser(UserName);
if (user != null)
{
txtUserName.Text = user.UserName;
txtUserName.ReadOnly = true;
txtPosition.Text = user.Position;
txtRe.Text = user.Re;
drpRight.SelectedValue = user.RoleID.ToString();
btnApply.Text = "更新";
}
}
else
{
txtUserName.ReadOnly = false;
btnApply.Text = "添加";
}
}
} /// <summary>
/// 绑定权限下拉框
/// </summary>
protected void BindDropDownList()
{
drpRight.Items.Clear();
drpRight.Items.Add(new ListItem("请选择角色", "0"));
DataSet ds = rolebll.GetSysRole("");
if (ds.Tables.Count != 0)
{
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
drpRight.Items.Add(new ListItem(ds.Tables[0].Rows[i]["RoleName"].ToString(), ds.Tables[0].Rows[i]["RoleID"].ToString()));
}
}
}
}模板页和一个用户控件里的Page_Load里面都没有内容
拿出内容页作为一个单独页面,不放在Content里面是不会出现这个问题的。.aspx<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div class="ManageLine">
<span class="ManageLineTitle">登录用户名:</span><span class="ManageLineInput">
<asp:TextBox ID="txtUserName" runat="server" MaxLength="20"></asp:TextBox></span><span class="ManageLineDesc"><asp:RequiredFieldValidator
ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUserName"
Display="Dynamic" ErrorMessage="登录用户名不能为空!"></asp:RequiredFieldValidator>只能填写20位以内的英文字母以及0-9的数字。</span>
<div class="clear">
</div>
</div>
<div class="ManageLine">
<span class="ManageLineTitle">权限:</span><span class="ManageLineInput"><asp:DropDownList
ID="drpRight" runat="server">
</asp:DropDownList></span><span class="ManageLineDesc">选择权限</span><div class="clear">
</div>
</div>
<div class="ManageLine">
<span class="ManageLineTitle">职务:</span><span class="ManageLineInput">
<asp:TextBox ID="txtPosition" runat="server" MaxLength="20"></asp:TextBox></span><span class="ManageLineDesc"><asp:RequiredFieldValidator
ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtPosition"
Display="Dynamic" ErrorMessage="职务不能为空!"></asp:RequiredFieldValidator>只能填写20位以内的英文字母以及0-9的数字。</span>
<div class="clear">
</div>
</div>
<div class="ManageLine">
<span class="ManageLineTitle">描述:</span><span class="ManageLineInput">
<asp:TextBox ID="txtRe" runat="server" MaxLength="100"
TextMode="multiLine" Rows="3">
</asp:TextBox></span><span class="ManageLineDesc">最多100个文字</span><div class="clear">
</div>
</div>
<div class="ManageSub">
<asp:Button ID="btnApply" runat="server" CausesValidation="True"
CssClass="Button01" Text="提交" onclick="btnApply_Click"></asp:Button>
<asp:Button ID="btnCancel" runat="server" CausesValidation="False" CssClass="Button01" Text="取消"></asp:Button></div>
<asp:Label ID="lblTest" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
if (!Page.IsPostBack)
{
代码;
}把 BindDropDownList(); 这句放你按钮点击事件里就可以了
{
BindDropDownList();
} protected void Button1_Click(object sender, EventArgs e)
{
代码....
BindDropDownList();
}
现在我是根本取不到值。 #region 提交 protected void btnApply_Click(object sender, EventArgs e)
{
if (UserName.Length != 0)
{
user = userbll.GetUser(UserName);
}
user.UserName = Strings.SqlFilterString(txtUserName.Text.ToString().Trim());
user.RoleID = Convert.ToInt32(drpRight.SelectedValue.ToString()); //这一句就会提示报错,说未将对象引用到实例,说明根本取不到值
user.Position = Strings.SqlFilterString(txtPosition.Text.ToString().Trim());
user.Re = Strings.SqlFilterString(txtRe.Text.ToString().Trim());
if (btnApply.Text == "添加") //添加帐户
{
user.Password = MD5.ToMD5("0000");
if (userbll.InsertUser(user))
{
Show("添加成功!");
}
}
else //编辑帐户
{
if (userbll.UpdateUser(user))
{
Show("修改成功!");
}
}
} #endregion
而且正常情况下,你在第一次进入页面if(!Page.IsPostBack)里绑定了下拉框数据后,如果没有做DropDownList.Items.Clear()是不会消失的,就好像GridView一样,你进入页面时将它绑定,难道之后你点一次按钮就要绑定一次,不绑定它就会消失吗?不会的。。
{
}
这样也会清除数据
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit")
{ }
if (e.CommandName == "Delete")
{ }
} <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
CssClass="aa06" Width="100%"
GridLines="None" AllowSorting="True" DataKeyNames="NodeID"
onrowcommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="NodeID" HeaderText="节点编号"/>
<asp:BoundField DataField="NodeName" HeaderText="节点名称"/>
<asp:BoundField DataField="Position" HeaderText="处理人" />
<asp:BoundField DataField="DealWay" HeaderText="处理方式" />
<asp:BoundField DataField="Re" HeaderText="备注" />
<asp:TemplateField HeaderText="操作" ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%#Eval("NodeID") %>'
Text="编辑" CommandName="Edit"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandArgument='<%#Eval("NodeID") %>'
Text="删除" CommandName="Delete" OnClientClick="是否确认删除!"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerSettings Visible="False" />
<HeaderStyle CssClass="listTitle" HorizontalAlign="Left" />
<AlternatingRowStyle CssClass="list01" />以上代码,为何点击GridView一行中的编辑按钮,不跳到后台的RowCommand方法中,反而GridView消失了?
实在是水平太差,对这个不怎么了解。上面有朋友回复谈到了这方面也没有认真琢磨,搞得自己莫名奇妙了好几天。实在感谢各位的回答,谢谢!