高手们快来帮小弟一把,一个疑难问题困扰了许久,急死人了……………………就剩20分了
我用datalist的显示“文章主题”,然后单击“详细”后显示内容,是用datalist中SelectedItemTemplate完成的,但是在单击“详细”后整个页面压根就没有显示?
我是通过接收浏览器传值来查询数据并以Datalist显示的
主要代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
c_id = Convert.ToInt32(Request.QueryString[ "cid "].ToString());
BindDataList()
}
}
protected void BindDataList() //数据绑定
{
SqlConnection conn = userOperate.createconn();
SqlDataAdapter adp = new SqlDataAdapter();
string strsql = "select * from event where c_id= " + c_id;
if (userFlag==1)
{
strsql = "select * from event where c_id= " + c_id;
//Response.Write(strsql);
}
else
{
strsql += "and e_person= ' " + userName + " ' ";
strsql += "order by e_time desc ";
}
adp.SelectCommand = new SqlCommand(strsql, conn);
DataSet ds = new DataSet();
adp.Fill(ds, "MyEvent ");
this.DataList1.DataSource = ds.Tables[ "MyEvent "].DefaultView;
this.DataList1.DataBind();
}
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "SelectContent ") //单击“详细”
{
DataList1.SelectedIndex = e.Item.ItemIndex;
}
else
{
if (e.CommandName == "Close ") //单击“关闭”
{
DataList1.SelectedIndex = -1;
}
}
BindDataList();
}
}
补充一下,该datalist绑定纪录是通过前面传值并接收后查询数据库中的相应纪录!
是不是跟这个有关系呢?
我的前台代码都正确,为啥还不能显示呢?请高手指教………………
[解决办法]
问题的原因在于你的DataList1_ItemCommand的最后一句BindDataList();
如果没猜错,这很容易陷入死循环. 你想必并不知道ItemCommand是什么.几乎不会有需要(至少我从来没遇见过)在ItemCommand中把任何语句写在if语句以外,因为触发ItemCommand的机会太多了,难以想象有什么代码需要在所有这些情况下都执行.更难以想象在这个地方再绑定自己,这就造成绑定的时候触发了ItemCommand,而ItemCommand又必然再引起绑定,然后再触发再绑定....死循环.
第2个问题,你的显示明细的代码在哪? 没看见
第3个问题,你的代码一挂上互联网我就该为你的服务器默哀三分钟了,这代码也太危险了~~~
如果我访问你的页面 http://........./...aspx?c_id=#######
假设我把 " 0 or 1=1 ;Drop table [event];-- " 编码以后放在你的#####中,那你的SQL语句就变成:
select * from event where c_id= 0 or 1=1 ;
Drop table [event];-- .......
因为--是注释符合,所以--后面的都忽略掉了
攻击你网站的人可不会跟我这么仁慈^_^ 仅仅把你的一个表给删除了.....说白了就是我随便在地址栏里写我的SQl语句,然后那些语句就在你的数据库里执行了....我爱干吗就干吗,你说呢?