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