2011-03-02 75 views
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執行後渲染爲字符串?

謝謝!

回答

0
$(document).ready() { 
    $("body").hide(); 
}) 

然後......

function CreateExposureGraph() { 
    $.ajax({ 
     ... 
     complete: function() { 
      $("body").show(); 
     } 
    }); 

} 

只是一個想法。

+0

我會試試看看是否有效。 – slandau 2011-03-02 20:42:47

+0

Nah - did not work =/ – slandau 2011-03-02 20:46:47

+0

這只是我真正想到的唯一事情......隱藏身體,直到執行最後一個客戶端腳本,然後在適當時調用$(「body」)。show()。窗口加載事件可能不是適當的時間。如果您的代碼正在同步執行,請在末尾調用show;否則如果你的渲染依賴於異步XHRs,那麼我不確定會有一個簡單的選項。 – lsuarez 2011-03-02 20:50:44