日期:2014-05-18  浏览次数:20499 次

三小问题
1:关于postback和ispostback如何影响程序.
我从网上搜到:

postback是回传 即页面在首次加载后向服务器提交数据,然后服务器把处理好的数据传递到客户端并显示出来,就叫postback 
 ispostback只是一个属性,即判断页面是否是回传,if(!Ispostback)就表示页面是首次加载, 
一个页面只能加载一次,但可以在加载后反复postback. 
支持服务器端事件的控件,会发出对当前Form的请求,这样在很多情形下我们就需要区别是否是对这个Form的第一次请求。

但我的问题是:
这段代码可以看完问题再看或者可以不看
  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  {
  ……
  string sql = "select aname,psw from admi where ano='000' ";
  SqlDataAdapter sda = new SqlDataAdapter(sql, strconn);
  SqlCommandBuilder mybd = new SqlCommandBuilder(sda);
  DataSet ds = new DataSet();
  sda.Fill(ds, "A");
  DataTable dt = ds.Tables["A"];
  for (int i = 0; i < dt.Rows.Count; i++)
  {
  DataRow tr = dt.Rows[i];
  TextBox1.Text = tr[0].ToString().Trim();
  }
  ……
  }
  }

  protected void Button1_Click(object sender, EventArgs e) //超级管理员修改密码
  { string name,pw ,no;
  name = TextBox1.Text.ToString().Trim();
  pw = TextBox2.Text.ToString().Trim();
  no = "000";
  …….
  sqlconn.Open();
  SqlCommand mycom = new SqlCommand("update admi set aname=' " + name + " ' ,psw=' " + pw +" ' where ano="+no, sqlconn);
  ……  
  }

为什么在Page_Load事件中不加上if (!IsPostBack)的判断, Button1_Click事件就得不到执行.

我的理解是Button1_Click事件会引发回传,然后服务器会处理Button1_Click事件,然后再把处理完后的数据再次发到浏览器上,这样子的话,就算再执行一次Page_Load事件也没影响吧.可为什么结果是不加判断就得不到执行.老师说不加判断就相当于刷新一次,可这是为什么呢?


2:

  SqlCommand mycom = new SqlCommand("update admi set aname=' " + name + " ' ,psw=' " + pw +" ' where ano="+no, sqlconn);
在得到执行后我有时发觉数据库中的数据的前后都会加上空格,甚至我在变量名后面加上
.ToString().Trim()也会这个样子。这又是为什么呢


3:如何实现多个DROPLIST的联动:
由于我只需要实现让它们的 SELECTEDINDEX 一样,所以我在需要实现此功能的DROPLIST的 SELECTEDINDEXCHANG 事件中把该 
DROPLIST的INDEX赋值给一个整型变量,然后再将该变量值赋给其它的DROPLIST的SELECTEDINDEX。POSTBACK也都设为了TRUE
但在执行的时候却是时灵时不灵的。

求解释?


















------解决方案--------------------
- -# 代码都贴不全

第一个问题,我没明白你要问什么。。。估计刚才过去不少人也都不知道你问啥

2.update admi set aname=' " + name + " '你自己看看单引号和双引号之间就有个空格,明明是你自己加的

3.要看具体代码才知道,像第一和第三个问题。。。自己单步跟进去观察。。。比发帖求解要方便
------解决方案--------------------
1.绑定数据源应该重构成一个方法,在第一个加载中执行一次,然后,在需要重新绑定数据的时候,在调用一次该方法
2.Trim();仅仅是去除字符串左右空格,中间空格不受影响,貌似你拼成的SQL语句中
" ' ,psw=' " 多加了空格
3.JS+AJAX实现联动,也无需服务器控件.
------解决方案--------------------
1、数据绑定、 如果不在!IsPostBack,更新的时候会导致数据,再次绑定,无法更新!
2、DropDownList 多级联动、失灵的原因、有可能是加载项过多导致的!只要设置为PostBack设置为true,回发只要二级里面有数据项、肯定会联动的!
------解决方案--------------------
1、后台先执行protected void Page_Load(object sender, EventArgs e)
{
} 不加ispostback后 就只执行protected void Page_Load(object sender, EventArgs e){}里面的相当于刷新一洗。加的话点控件就不在执行protected void Page_Load(object sender, EventArgs e){}将会执行控件事件
2、sql语句的问题
3、学习一下 updatepanel,或者学习一下js脚本 实现。