刷新引起的问题
问题描述:我通过前台调用后台方法实现下拉列表框联动,虽然实现了联动,但我发现不能对其进行编程(一旦触发一个会引起回传的事件,之前做的联动就没有了)
前台代码:
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript">
function ajx() {
var ddl = document.getElementById("ddl");
var ddlcon = document.getElementById("ddlcon");
var dss = coptmng.Getds(ddl.value.toString());//调用后台方法得到一个dataset
setlist(dss);
}
function setlist(response){
if (response != null) {
var ds = response.value; // 返回集
var list = document.getElementById("ddlcon");
var dl = document.getElementById("ddl");
list.length = 0;
if (ds != null && typeof (ds) == "object" && ds.Tables != null)
{
for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
if (dl.value == "机房名") {
var option = document.createElement("OPTION");
option.value = ds.Tables[0].Rows[i].jname;
option.text = ds.Tables[0].Rows[i].jname;
list.add(option);
}
if (dl.value == "地点") {
var option = document.createElement("OPTION");
option.value = ds.Tables[0].Rows[i].place;
option.text = ds.Tables[0].Rows[i].place;
list.add(option);
}}}}}
</script>
</head>
按<select runat="server" id="ddl" onchange="ajx()">
<option>机房名</option>
<option>地点</option>
</select>查询:
<select runat="server" id="ddlcon" ></select>
<asp:Button runat="server" id="select" Text="查询" onclick="select_Click"/>
<asp:Table ID="showtb" runat="server">
</asp:Table>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterEnumForAjax(typeof(coptmng));
Ajax.Utility.RegisterTypeForAjax(typeof(coptmng));
if (!IsPostBack)
{
......
ddlcon.DataSource =dt; //绑定Dataset中的DataTable(dt)
ddlcon.DataTextField = "jname";
ddlcon.DataValueField = "jname";
DataBind();
} }
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
public DataSet Getds(string st)//这个方法用于前台调用
{
string cmdstr;
if (st == "机房名")
{
cmdstr = "select jname from croombase ";
}
else
{
cmdstr = "select place from croombase ";
}
DataSet ds = Dbop.getds(cmdstr);//这是我自定义的一个方法,可以得到一个dataset
return ds;
}
protected void select_Click(object sender, EventArgs e)
{ //这些变量可以不看
string value, temp1, temp2, temp3;
temp1 = ddlxn.Value.ToString();
temp2 = "-";
temp3 = ddlxq.Value.ToString();
value = String.Concat(temp1, temp2, temp3);
if (ddl.Value == "机房名") //问题在else部分
{
string jname = ddlcon.Value;
string cmdstr = "select jname,sweek,eweek,tim from copt where jname='" + jname + "' and opsm='" + value + "'";
DataSet ds = Dbop.getds(cmdstr);
showhead(ds.Tables[0]);
showdata(ds.Tables[0],value);
}
else
{
string place = ddlcon.Value.ToString();//得不到想要的值
string jname;
string cmdstr1 = "select jname from croombase where place='"+place + "'";
Response.Write(cmdstr1);
......
} }
问题就在这儿:string place = ddlcon.Value.ToString()。我始终得不到联动后的值,老师说点击“查询”按钮会引起回传,所以ddlcon中通过javascript创建的值就没有了。我想知道有没有不做大面积改动就解决这个问题的办法。
另外我还有几个问题:
1:一个会引起回传的控件,怎样知道它引起了哪些控件的回传?应该不是整个页面吧?
2:我ddl控件的数据绑定是在if (!IsPostBack)语句段中,如果“查询”按钮引起了回传(页面或者说部分页面是重新发送的),那为什么ddl中还有数据而且只有绑定得到的数据,没有javascript创建的值?
3:如果我上面的做法是错的,那老师教的这种前台调用后台实现无刷新联动到底应该用在什么地方?