刷新引起的问题

bqforyou 2012-11-23 07:18:49
问题描述:我通过前台调用后台方法实现下拉列表框联动,虽然实现了联动,但我发现不能对其进行编程(一旦触发一个会引起回传的事件,之前做的联动就没有了)

前台代码:
<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:如果我上面的做法是错的,那老师教的这种前台调用后台实现无刷新联动到底应该用在什么地方?




...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2012-11-23
  • 打赏
  • 举报
回复
小兄弟:给你讲个故事吧。请耐心听完,这对你了解.net webform有好处。 有个小男孩(后台)放风筝,小男孩扯一下(回传)线,风筝就会动,风筝原来的状态都会发生改变。 但是,回传状态的改变,对于小男孩来说,大部分都是不好的。于是,小男孩设计了一些东西,来保持状态(主要是ViewState)。如果你看.aspx页面的源代码,会看到一个input type='hidden'的隐藏域, 里面有很多“乱码”,这就是.net页面能保持状态的关键。 比如:风筝上有个红绿灯(控件),一只小蚊子把红灯换成了绿灯(在前台),但小男孩扯了一下绳子(回传),灯要保持状态,又回到了红灯状态。 当然,上面讲的,只能说是一个大概,不知道你能明白多少。不过,只要你的经历增多,过一年再来看这个故事,也许你比我领悟来还要深刻了。 你的代码我也不想看,我只告诉你一件事情——后台做后台的事,前台做前台的事。前后台一起控制,不乱也得乱。相互之间会干扰。 如果你用 .net 的web控件,就一直用, 什么东西都用。就像你想无刷新,你可以用 UpdatePanel。——这个红绿灯完全由小男孩控制。 如果你不想小男孩控制,也行。风筝(前台)来控制。那你直接用最原始的 <select id='sel1' > <option value='1' >1</option> </select> <select id='sel2' > <option value='1' >1</option> </select> 同样可以做得到。这样后台绝对没有办法影响到它。页面没有一个.net控件可以引起回传,全部都用jQuery或js的ajax技术来提交和操作,清爽无比。
mizuho_2006 2012-11-23
  • 打赏
  • 举报
回复
用客户端的按钮进行Ajax查询就不会产生整个页面的刷新了。。 向后台发出请求,在后台页面查询后将查询结果封装成对象并序列化传给前台,前台反序列化后再动态生成table展示数据。 Ajax就这点不好,页面一刷新效果之前产生的效果就都看不到了
bqforyou 2012-11-23
  • 打赏
  • 举报
回复
或者说那个老师的回答就三个字:“无刷新” 但我没想到这种无刷新是建立在不能编程的基础上,或者是我还没真的学会吧
bqforyou 2012-11-23
  • 打赏
  • 举报
回复
我觉得你应该问你们的老师,否则你就可以判断你们的老师“过时了”。 我没问主要是教这个技术的老师谁今天没来,来的是另一个,所以就没问了.....
  • 打赏
  • 举报
回复
引用 楼主 bqforyou 的回复:
另外我还有几个问题: 1:一个会引起回传的控件,怎样知道它引起了哪些控件的回传?应该不是整个页面吧? 2:我ddl控件的数据绑定是在if (!IsPostBack)语句段中,如果“查询”按钮引起了回传(页面或者说部分页面是重新发送的),那为什么ddl中还有数据而且只有绑定得到的数据,没有javascript创建的值? 3:如果我上面的做法是错的,那老师教的这种前台调用后台实现无刷新联动到底应该用在什么地方?
1. 当然是整个页面重新回传和加载。 2. 那是asp.net控件啊。人家的控件,岂是你的所谓代码可比?!如果想理解asp.net控件开发,那么你就应该学习asp.net控件深入的知识,而不是仅仅整什么“javascript编程”。 3. 我没有看你的代码。我觉得你应该问你们的老师,否则你就可以判断你们的老师“过时了”。

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧