0
所以我输出为excel。我这样做的方式是在后端渲染视图,然后使用视图生成的HTML字符串编写一个excel文件。问题是,我想生成的这个视图只是一些空白的表/列,直到执行客户端代码。它正在呈现,但没有一个Jquery正在执行,所以当我导出时没有任何东西被填充,并且我得到一个空白的导出。下面是这个视图:在后台渲染视图并执行客户端脚本
<table id="exposureTableBTS">
<tr>
<td id="headerBTS" />
</tr>
<tr>
<td id="tableBTS" />
<td id="graphBTS" />
</tr>
</table>
<script>
$(document).ready(function() {
$("#exposureTableBTS").bubble({ width: 400, title: 'Exposure:', backgroundColor: '#ffffff' });
$.ajax({
type: "POST",
url: "/Extranet/mvc/Indications.cfc/GetExposure ",
dataType: "json",
data: GetJSONForID(),
success: function(data) {
CreateTableFromPoints(data.expsosure);
}
});
function CreateTableFromPoints(data)
{
$("#tableBTS").html(CreateExposureBodyTable(data));
$("#headerBTS").html(CreateExposureHeaderTable(data));
}
function CreateExposureGraph() {
$.ajax({
url: "/Extranet/mvc/Indications.cfc/ExposureGraph",
data: GetJSONForID(),
error:function(x,e){
if(x.status==0){
alert('You are offline!!\n Please Check Your Network.');
}else if(x.status==404){
alert('Requested URL not found.');
}else if(x.status==500){
alert('Internel Server Error.');
}else if(e=='parsererror'){
alert('Error.\nParsing JSON Request failed.');
}else if(e=='timeout'){
alert('Request Time out.');
}else {
alert('Unknow Error.\n'+x.responseText);
}
},
success:function(data)
{
$("#graphBTS").html(data);
}
});
}
});
</script>
这里是我的后端代码:
protected string RenderViewToString()
{
using (var writer = new StringWriter())
{
var view = new WebFormView(_viewPath);
var vdd = new ViewDataDictionary<Model>(_model);
var viewCxt = new ViewContext(_context, view, vdd, new TempDataDictionary(), writer);
viewCxt.View.Render(viewCxt, writer);
return writer.ToString();
}
}
对于没有获得不使用JavaScript呈现或更新任何渲染页面,这工作正常。但是,如何让这个页面在JavaScript执行后渲染为字符串?
谢谢!
我会试试看看是否有效。 – slandau 2011-03-02 20:42:47
Nah - did not work =/ – slandau 2011-03-02 20:46:47
这只是我真正想到的唯一事情......隐藏身体,直到执行最后一个客户端脚本,然后在适当时调用$(“body”)。show()。窗口加载事件可能不是适当的时间。如果您的代码正在同步执行,请在末尾调用show;否则如果你的渲染依赖于异步XHRs,那么我不确定会有一个简单的选项。 – lsuarez 2011-03-02 20:50:44