首页 新闻 会员 周边

页面按钮只能触发一次事件 问题

-2
悬赏园豆:80 [已解决问题] 解决于 2010-11-24 09:34
public class EMSWebReports : System.Web.UI.WebControls.WebParts.WebPart

{
private Control mReportUserControl;

public EMSWebReports()
{
this.ExportMode = WebPartExportMode.NonSensitiveData;
}

protected override void Render(HtmlTextWriter writer)
{
//base.Render(writer);
try
{
this.mReportUserControl.RenderControl(writer);
}

catch (Exception e)
{
//To log the error message.
}
}

protected override void CreateChildControls()
{
//base.CreateChildControls();
try
{
this.Controls.Clear();

this.mReportUserControl = this.Page.LoadControl("~/_controltemplates/EMSControls/EMSWebReport.ascx");
this.Controls.Add(this.mReportUserControl);
}
catch (Exception e)
{
//To log the error message.
}
}

以上是我编写的一个WebPart代码示例, EMSWebReport.ascx 是我自定义的一个用户控件。现在存在的问题是,在我自定义的用户控件上有几个按钮 。然后将WebPart 添加到Sharepoint Server 2007中,其中的部分按钮事件在第一次点击的时候是可以正常触发的,但是经过第一次的点击后,页面上的全部按钮事件就不能再触发点击事件了。 各位大侠帮我看看这是什么原因。。。 先谢谢

导出Excel文档代码
1 protected void ButtonExportToExcel_Click(object sender, EventArgs e)
2 {
3 string reportToExeclName = this.ExportFileName();
4 DataSet ds = new DataSet();
5 ds = (DataSet)Session["ReportData"];
6 if (ds == null)
7 {
8 LabelMessages.Text = "The data has expired, please refresh!";
9 }
10 // Response.Clear();
11 // Response.Buffer = false;
12 // Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
13   Response.AppendHeader("content-disposition", "attachment;filename=" + reportToExeclName + ".xls");
14 Response.ContentType = "application/octet-stream";
15
16 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
17 {
18 string rowString = ds.Tables[0].Rows[i]["REPORT_ROW"].ToString();
19 string[] rowStringSplit = System.Text.RegularExpressions.Regex.Split(rowString, "\\\\n");
20 for (int j = 0; j < rowStringSplit.Length; j++)
21 {
22 string rowData = rowStringSplit[j].Replace("\\n", "");
23 rowData = rowData.Replace("\\t", "\t\t");
24 rowData = rowData.Replace("&nbsp;", "") + "\n";
25 Response.Write(rowData);
26 }
27 }
28 Response.Flush();
29 //Response.End();
30   }

 

导出PDF文档代码
1
2 protected void ButtonExportToPdf_Click(object sender, EventArgs e)
3 {
4 this.DelPdfFile();
5 string reportToPdfPdth = AppDomain.CurrentDomain.BaseDirectory + "pdf\\" + this.ExportFileName() + ".pdf";
6 DataSet ds = new DataSet();
7 ds = (DataSet)Session["ReportData"];
8 if (ds == null)
9 {
10 LabelMessages.Text = "The data has expired, please refresh!";
11 }
12 Document document = new Document(PageSize.A4, 30, 30, 5, 5);
13 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(reportToPdfPdth, FileMode.Create));
14 try
15 {
16 document.Open();
17 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
18 {
19 string rowString = ds.Tables[0].Rows[i]["REPORT_ROW"].ToString();
20 string[] rowStringSplit = System.Text.RegularExpressions.Regex.Split(rowString, "\\\\n");
21 for (int j = 0; j < rowStringSplit.Length; j++)
22 {
23 string rowData = rowStringSplit[j].Replace("\\n", "");
24 rowData = rowData.Replace("\\t", "\t\t\t");
25 rowData = rowData.Replace("&nbsp;", "") + "\n";
26 document.Add(new Phrase(rowData));
27 }
28 }
29 }
30 catch (Exception)
31 {
32 throw;
33 }
34 finally
35 {
36 document.Close();
37 writer.Close();
38 }
39 try
40 {
41 String FullFileName = reportToPdfPdth;
42 FileInfo DownloadFile = new FileInfo(FullFileName);
43 // Response.Clear();
44 //Response.Buffer = false;
45   string dd = System.Web.HttpUtility.UrlEncode(DownloadFile.FullName);
46 Response.AppendHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(DownloadFile.FullName));
47 Response.ContentType = "application/octet-stream";
48 Response.WriteFile(DownloadFile.FullName);
49 }
50 catch (Exception)
51 {
52 throw;
53 }
54 finally
55 {
56 Response.Flush();
57 // System.Web.HttpContext.Current.Response.End();
58

 

了。。。

导出文本文档
1 protected void ButtonExportToText_Click(object sender, EventArgs e)
2 {
3 string reportToTextName = this.ExportFileName();
4 DataSet ds = new DataSet();
5 ds = (DataSet)Session["ReportData"];
6 if (ds == null)
7 {
8 LabelMessages.Text = "The data has expired, please refresh!";
9 return;
10 }
11 // Response.Clear();
12 // Response.Buffer = false;
13 // Response.ContentType = "application/octet-stream";
14 Response.AppendHeader("content-disposition", "attachment;filename=" + reportToTextName + ".txt");
15
16 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
17 {
18 string rowString = ds.Tables[0].Rows[i]["REPORT_ROW"].ToString();
19 string[] rowStringSplit = System.Text.RegularExpressions.Regex.Split(rowString, "\\\\n");
20 for (int j = 0; j < rowStringSplit.Length; j++)
21 {
22 string rowData = rowStringSplit[j].Replace("\\n", "");
23 rowData = rowData.Replace("\\t", "\t\t");
24 rowData = rowData.Replace("&nbsp;", "");
25 Response.Write(rowData + "\r\n");
26 }
27 }
28 Response.Flush();
29 //Response.End();
30 }

 

yaoxuemin的主页 yaoxuemin | 初学一级 | 园豆:100
提问于:2010-10-25 14:26
< >
分享
最佳答案
0

有可能不是按钮点击失效,而是每次点击按钮都是相同的操作,取出了相同的数据来显示,因此感觉第一次点过后再点就没反应了。

收获园豆:80
wang_yb | 老鸟四级 |园豆:4891 | 2010-10-25 14:56
不是那样的原因。。 Search按钮是没有问题的,可以对此点击,并查询出不同的数据。 页面会出现问题的按钮 都是导出按钮,比如导出到文本文档按钮,导出到Excel文档按钮。 这些按钮的同样的操作就是点击以后在用户端弹出下载提示框,用户可以保存文档等操作。 只要你点击了导出按钮后,页面上的Search按钮 就不能查询出不同的数据了。并且点击导出按钮后也不会弹出下载提示框了。我也加断电调试了,根本不能进程序中。 麻烦在帮我分析一下是什么原因。。。 先谢谢了。。
yaoxuemin | 园豆:100 (初学一级) | 2010-10-25 15:02
@yaoxuemin: 是下载相关的按钮吧,这些按钮事件的处理中,如果最后如果把response关闭了,后导致页面有问题的。最后用response.flush(),而不是Close()
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-25 15:20
我试过了,问题还是没有解决。 :-(
yaoxuemin | 园豆:100 (初学一级) | 2010-10-25 16:06
如果大家有什么好的想法,可以加我的QQ: 345362364 谢谢啦!!
yaoxuemin | 园豆:100 (初学一级) | 2010-10-25 16:08
@yaoxuemin: 看看页面的代码是不是有什么导致页面失效,过期的地方。 主要就是有没有把response结束的地方
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-25 16:25
;-) 还是不行啊!
yaoxuemin | 园豆:100 (初学一级) | 2010-10-25 16:45
@yaoxuemin: 能否把导出的代码贴出来看看啊
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-25 17:23
@wang_yb: 把Response.ContentType = "application/octet-stream"; 改成 HttpContext.Current.Response.ContentType = "application/download" 试试呢
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-25 21:45
您好,我试过了,还是不行! 昨天我在网上看到了一个类似的情况。下边是它的网址,您看看。 我没有看明白。 http://social.microsoft.com/Forums/pt-BR/sharepointwebpartzhchs/thread/8fd90d2c-94bb-4b55-a73f-5ebc18d0f58c 我并没有用到 qucikpart
yaoxuemin | 园豆:100 (初学一级) | 2010-10-26 13:43
@yaoxuemin: 这个的意思是自定义控件中不能重写VerifyRenderingInServerForm。 所以重新new了个page和form,response时把这个page和form一起写回客户端。 这样相当于一次完整的提交,提交后下次点击按钮应该就会进入page_load事件。
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-26 14:58
可以把page和form的那段代码试试。
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-26 15:00
;-) 我试过了还是不起作用,也不知道是不是我写的有问题。 非常感谢你一直对我的问题的关注。
yaoxuemin | 园豆:100 (初学一级) | 2010-10-26 15:21
@yaoxuemin: 不用客气,解决问题的同时自己也在学习。
wang_yb | 园豆:4891 (老鸟四级) | 2010-10-26 15:30
其他回答(1)
0

  这个事件适用于任何按钮 所以只有有一个按钮触发了事件 其他的按钮都用不了了

Fry_CiCi | 园豆:0 (初学一级) | 2010-10-25 16:29
?? 不是很明白您的意思。。。
支持(0) 反对(0) yaoxuemin | 园豆:100 (初学一级) | 2010-10-25 16:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册