Javascript ASP.NET Web服务中的Excel导出
我有一个ASP.Net Web应用程序,在我的一个页面中,我使用JQuery JQGrid,我希望能够将JQGrid导出到Excel工作表,因此我使用JavaScript收集数组中的值,然后调用WebService来填充DataGrid中的值,我成功地完成了所有这一切,除了在WebService中导出外,未显示任何文件下载,这是我的WebService代码:Javascript ASP.NET Web服务中的Excel导出,javascript,jquery,asp.net,web-services,Javascript,Jquery,Asp.net,Web Services,我有一个ASP.Net Web应用程序,在我的一个页面中,我使用JQuery JQGrid,我希望能够将JQGrid导出到Excel工作表,因此我使用JavaScript收集数组中的值,然后调用WebService来填充DataGrid中的值,我成功地完成了所有这一切,除了在WebService中导出外,未显示任何文件下载,这是我的WebService代码: [WebMethod] public void GetData(object[] Values) { DT_ToFill.Colu
[WebMethod]
public void GetData(object[] Values)
{
DT_ToFill.Columns.Add("CaseID");
DT_ToFill.Columns.Add("SR");
foreach (object Value in Values)
{
Dictionary<string, object> DictVals = new Dictionary<string, object>();
DictVals = (Dictionary<string, object>)Value;
string CaseID = DictVals["CaseID"].ToString();
string SR = DictVals["SR"].ToString();
object[] Obj = new object[2] { CaseID, SR };
DT_ToFill.Rows.Add(Obj);
}
ExportToExcel(DT_ToFill, Context.Response);
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
public void ExportToExcel(DataTable dt, HttpResponse Response)
{
GridView GridView1 = new GridView();
GridView1.DataSource = dt;
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "inline;filename=Schedule_ExcelSheet.xls");
Response.Charset = "";
Response.ContentType = "application/ms-excel";
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.UTF8;
StringWriter sw = new StringWriter();
HtmlTextWriter ht = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataBind();
GridView1.RenderControl(ht);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
public void VerifyRenderingInServerForm(Control control)
{
}
[WebMethod]
public void GetData(对象[]值)
{
dttofill.Columns.Add(“CaseID”);
DT_ToFill.Columns.添加(“SR”);
foreach(值中的对象值)
{
Dictionary DictVals=新字典();
DictVals=(字典)值;
字符串CaseID=DictVals[“CaseID”].ToString();
字符串SR=DictVals[“SR”].ToString();
object[]Obj=新对象[2]{CaseID,SR};
DT_ToFill.Rows.Add(Obj);
}
ExportToExcel(dttofill,Context.Response);
}
[网络方法]
公共字符串HelloWorld()
{
返回“你好世界”;
}
public void ExportToExcel(数据表dt、HttpResponse响应)
{
GridView GridView1=新的GridView();
GridView1.DataSource=dt;
Response.Buffer=true;
AddHeader(“内容处置”,“内联;文件名=Schedule_ExcelSheet.xls”);
响应。Charset=“”;
Response.ContentType=“应用程序/ms excel”;
响应。Charset=“UTF-8”;
Response.ContentEncoding=Encoding.UTF8;
StringWriter sw=新的StringWriter();
HtmlTextWriter ht=新的HtmlTextWriter(sw);
GridView1.AllowPaging=false;
GridView1.DataBind();
GridView1.渲染控制(ht);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
public void VerifyRenderingInServerForm(控件)
{
}
请帮忙。。。
谢谢听起来像是要将excel文件作为对ajax请求的响应发送回去?如果是这样,我认为您无法通过ajax实现文件下载
可以像现在一样通过ajax发送数据,但可以使用新窗口或iframe(将其附加到document.body)并将src设置为返回excel文件的url。这将触发文件下载。这是我通常做的事 是的,你说得对@jForrest,但我不明白第二部分,我该怎么做。。。?!你好抱歉,我将尝试澄清。如果您打开一个新窗口或在页面上附加一个iframe,文件下载将有效。最简单的可能是一个新窗口。因此:1)执行您现在正在执行的操作,将数据发送到服务器2)打开一个新窗口。将新窗口指向一个url,该url将像您现在这样发送xls(可能使用用户会话将正确的pdf发送回来?)3当新窗口加载时,它将下载xls