dropdownlist的取值有关问题万分感谢
dropdownlist的取值问题万分感谢
我使用dropdownlist控件来获取值,在后台对ddlclass绑定了数据库,代码是这样的,
<tr>
<td width ="25%">职位分类
</td>
<td style ="width:100px"><asp:DropDownList ID ="ddlClass" runat ="server"
DataValueField ="ClsID" DataTextField="ClsName"
>
</asp:DropDownList>
</td>
</tr>
<tr><td>公司编号</td>
<td><asp:DropDownList ID ="ddlCID" runat ="server"
DataTextField="ComName" DataValueField="CID" AutoPostBack="false"
>
</asp:DropDownList></td>
</tr>
<tr >
<td class="style1" >职位介绍
</td>
<td class="style1" >
<textarea id="Detail" atomicselection="True" name="Detail" ></textarea>
</td>
</tr>
<tr align="center">
<td colspan="2">
<asp:ImageButton ID="PubID" runat="server" Text="发布职位" onclick="PubID_Click" ImageUrl="~/images/提交.PNG" Height="29px" Width="68px" />
</td>
</tr>
后台
提交按钮的后台代码为
if (PName.Text.Trim() == "") {
Response.Write("<script> alert('请输入职位名称')</script>");
PName.Focus();
}
string pname = PName.Text.Trim();
int pid = int.Parse(PosID.Text.Trim());
string cname = Session["ComName"].ToString();
string clsid = ddlClass.SelectedItem.Value;//用这句来获得工作分类的编码如果选择的是服务类应该就是5
string strdt = DateTime.Now.ToString();
// string detail = Detail.Text.trim();
if (!cname.Equals(ddlCID.Text))
{
Response.Write("您只能发布自己公司的职位");
}
else
{
Position ps = new Position();
ps.PosID1 = pid;
ps.CID1 = int.Parse(ddlCID.SelectedValue);//这句来获得发布职位的公司编号
ps.ComName1 = cname;
ps.ClsID1 = int.Parse(clsid);
ps.PosName1 = pname;
ps.PubTime1 = strdt;
ps.Detail1 = null;
ps.publish();
Response.Write("<script>alert('已经发布成功')</script>");
PName.Text = "";
PName.Focus();
}
}
但是现在出现的问题是当页面加载的时候,比如工作分类默认的为制造业,编号为1,则当我重新选择为服务业的时候(应该获得的值为5的时候),string clsid = ddlClass.SelectedItem.Value这句获得的总是1,也就是说页面总是选择加载时候的数据,而不是我选择的下拉框的数据,我曾用autopostback ,但是也不行,求大神指教,帮助一下,万分感谢
------解决思路----------------------
ddlClass.SelectedItem.Value原本就没有错,或许不是这个问题,而是其它方面的问题,你不妨再认真检查,或者放一个静态的ddl取值试验试验看
------解决思路----------------------
没有时间看你的代码,简单说2个检查点:
1. 回发时不能重新绑定数据。回发时在你的Page_Load中根本不需要读取数据库,asp.net会自动给你重新填入所有数据。有些人在Page_Load中不判断 (!IsPostback) 条件而重复重新绑定了数据,就会把数据搞乱,事件就不能触发了。
2. 检查你的“值为5”的Item在后台绑定数据中到底存在否。有些人只是在客户端传值,而服务器端并没有哪个Item有对应的值,这时候就需要访问 DropdownList 控件的 Text 属性而不是 SelectedValue 属性,因为在后台没有匹配这个值的 SelectItem。
------解决思路----------------------
根本没贴出绑定下拉列表的代码和page_load里的代码
可以说贴的这些东西都没啥用
应该就是如SP1234所说,你不管用户选了东西还是首次加载页面,都给下拉列表重新绑定数据了
那么当然你重新绑定了数据,用户选的就白选了
------解决思路----------------------
估计肯定是回发重新绑定数据了
我使用dropdownlist控件来获取值,在后台对ddlclass绑定了数据库,代码是这样的,
<tr>
<td width ="25%">职位分类
</td>
<td style ="width:100px"><asp:DropDownList ID ="ddlClass" runat ="server"
DataValueField ="ClsID" DataTextField="ClsName"
>
</asp:DropDownList>
</td>
</tr>
<tr><td>公司编号</td>
<td><asp:DropDownList ID ="ddlCID" runat ="server"
DataTextField="ComName" DataValueField="CID" AutoPostBack="false"
>
</asp:DropDownList></td>
</tr>
<tr >
<td class="style1" >职位介绍
</td>
<td class="style1" >
<textarea id="Detail" atomicselection="True" name="Detail" ></textarea>
</td>
</tr>
<tr align="center">
<td colspan="2">
<asp:ImageButton ID="PubID" runat="server" Text="发布职位" onclick="PubID_Click" ImageUrl="~/images/提交.PNG" Height="29px" Width="68px" />
</td>
</tr>
后台
提交按钮的后台代码为
if (PName.Text.Trim() == "") {
Response.Write("<script> alert('请输入职位名称')</script>");
PName.Focus();
}
string pname = PName.Text.Trim();
int pid = int.Parse(PosID.Text.Trim());
string cname = Session["ComName"].ToString();
string clsid = ddlClass.SelectedItem.Value;//用这句来获得工作分类的编码如果选择的是服务类应该就是5
string strdt = DateTime.Now.ToString();
// string detail = Detail.Text.trim();
if (!cname.Equals(ddlCID.Text))
{
Response.Write("您只能发布自己公司的职位");
}
else
{
Position ps = new Position();
ps.PosID1 = pid;
ps.CID1 = int.Parse(ddlCID.SelectedValue);//这句来获得发布职位的公司编号
ps.ComName1 = cname;
ps.ClsID1 = int.Parse(clsid);
ps.PosName1 = pname;
ps.PubTime1 = strdt;
ps.Detail1 = null;
ps.publish();
Response.Write("<script>alert('已经发布成功')</script>");
PName.Text = "";
PName.Focus();
}
}
但是现在出现的问题是当页面加载的时候,比如工作分类默认的为制造业,编号为1,则当我重新选择为服务业的时候(应该获得的值为5的时候),string clsid = ddlClass.SelectedItem.Value这句获得的总是1,也就是说页面总是选择加载时候的数据,而不是我选择的下拉框的数据,我曾用autopostback ,但是也不行,求大神指教,帮助一下,万分感谢
------解决思路----------------------
ddlClass.SelectedItem.Value原本就没有错,或许不是这个问题,而是其它方面的问题,你不妨再认真检查,或者放一个静态的ddl取值试验试验看
------解决思路----------------------
没有时间看你的代码,简单说2个检查点:
1. 回发时不能重新绑定数据。回发时在你的Page_Load中根本不需要读取数据库,asp.net会自动给你重新填入所有数据。有些人在Page_Load中不判断 (!IsPostback) 条件而重复重新绑定了数据,就会把数据搞乱,事件就不能触发了。
2. 检查你的“值为5”的Item在后台绑定数据中到底存在否。有些人只是在客户端传值,而服务器端并没有哪个Item有对应的值,这时候就需要访问 DropdownList 控件的 Text 属性而不是 SelectedValue 属性,因为在后台没有匹配这个值的 SelectItem。
------解决思路----------------------
根本没贴出绑定下拉列表的代码和page_load里的代码
可以说贴的这些东西都没啥用
应该就是如SP1234所说,你不管用户选了东西还是首次加载页面,都给下拉列表重新绑定数据了
那么当然你重新绑定了数据,用户选的就白选了
------解决思路----------------------
估计肯定是回发重新绑定数据了