2009-06-24 6 views
0

Je voudrais construire par programme un HtmlTable/Table dans le code derrière un webservice et le faire retourner comme une chaîne de HTML afin qu'il puisse être écrit avec JavaScript dans le innerhtml de une période/div/whateverRenvoyer un HtmlTable à écrire avec ajax

Quelque chose de semblable à ce qui suit:

//webservice.amsx.cs Build the table, called by another/different method 
protected string Table_Maker() 
{ 
HtmlTable tbl = new HtmlTable(); 
HtmlTableCell cell = new HtmlTableCell(); 
HtmlTableRow row = new HtmlTableRow(); 
cell.InnerText = "WhateverText";  
row.Cells.Add(cell); 
tbl.Rows.Add(row); 

return tbl.ToString(); 
} 

//somepage.aspx write table to the div 
function menuHelper(toplayer, toplayernumber) 
{ 
    var sublayertable; 
    var sublayerpostcompileID; 
    var toplayernumber; 

    menuHelper_Part1(); 

    function menuHelper_Part1() 
    { 

    //replace ucMainMenu with ucMainMenu_pnlContent 
    sublayerpostcompileID = toplayer.replace("ucMainMenu", "ucMainMenu_pnlContent"); 
    //Call the webmethod 
    webbernetz.MenuHelperWebService.Sub_Menu_Helper(toplayernumber, menuHelper_Part2);     
    } 

    function menuHelper_Part2(result){ 
    //Write the result to the target area 
    document.getElementById(sublayerpostcompileID).innerHTML = result; 
    } 
} 

Quand je le retourner au javascript le javascript écrit simplement "System.Web.UI.HtmlControls.HtmlTable".

Comment l'obtenir pour écrire la table actuelle?

+1

Y a-t-il une question ici? – tvanfosson

+0

Et la question est? – Kirschstein

Répondre

2

Le seul problème avec votre code est l'utilisation de "tbl.ToString()".

Comme indiqué dans certains des autres messages, vous devez Rendu le contrôle de table à l'aide d'un HtmlTextWriter à un objet StringBuilder, qui peut ensuite renvoyer une valeur de chaîne pour votre méthode. Quelque chose comme ceci:

protected string Table_Maker() { 
    HtmlTable tbl = new HtmlTable(); 
    HtmlTableCell cell = new HtmlTableCell(); 
    HtmlTableRow row = new HtmlTableRow(); 
    cell.InnerText = "WhateverText"; 
    row.Cells.Add(cell); 
    tbl.Rows.Add(row); 

    StringBuilder sb = new StringBuilder(); 
    using(StringWriter sw = new StringWriter(sb)) { 
     using(HtmlTextWriter tw = new HtmlTextWriter(sw)) { 
      tbl.RenderControl(tw); 
     }  
    }  
    return sb.ToString(); 
} 

Cela devrait retourner le code HTML à insérer dans votre page.

+0

Merci beaucoup. – aggitan

0

Il existe une méthode RenderControl() que vous pouvez appeler sur n'importe quel contrôle. Ou si vous n'utilisez pas HtmlTable pour faire autre chose que la construction de HTML, alors utilisez HtmlTextWriter.

+0

Puis-je avoir un exemple en utilisant HtmlTextWriter s'il vous plaît? – aggitan

+0

http://dotnetperls.com/htmltextwriter – epitka

0

Le problème ici est que la méthode HtmlTable.ToString que vous utilisez n'est pas appropriée pour ce que vous voulez. 'ToString' renvoie une chaîne qui représente l'objet en cours. Dans ce cas, vous devez Render la table d'abord à HTMLTextWriter et vous pouvez ensuite utiliser la méthode ToString.

+0

Puis-je avoir un exemple s'il vous plaît? – aggitan

0

utiliser juste tbl.InnerHtml, au lieu de ToString

0

On dirait que vous faites plus compliquée qu'elle doit être. Que diriez-vous de ne pas utiliser l'objet HtmlTable et de simplement créer une chaîne contenant le code html dont vous avez besoin.

Questions connexes