¿Cómo se muestran los contenidos html de la cadena en el control del webbrowser?

Tengo el progtwig de aplicación ac # win. Guardo el texto con formato html en mi base de datos, pero quiero mostrarlo en un navegador web a mi usuario. ¿Cómo se muestran los contenidos html de cadenas en el control del webbrowser?

gracias por adelantado

Prueba esto:

 webBrowser1.DocumentText = "Please enter your name:
" + "
" + "continue" + "";

Como comentó Thomas W. – Casi me perdí este comentario, pero tuve los mismos problemas, así que vale la pena reescribirlo como una respuesta, creo.

El principal problema es que después de la primera asignación de webBrowser1.DocumentText a algún html, las asignaciones posteriores no tuvieron ningún efecto.

La solución tal como la vincula Thomas se puede encontrar en detalle en http://weblogs.asp.net/gunnarpeipman/archive/2009/08/15/displaying-custom-html-in-webbrowser-control.aspx, pero resumiré a continuación en caso de que esta página no esté disponible en el futuro.

En resumen, debido a la forma en que funciona el control webBrowser, debe navegar a una nueva página cada vez que desee cambiar el contenido. Por lo tanto, el autor propone un método para actualizar el control como:

 private void DisplayHtml(string html) { webBrowser1.Navigate("about:blank"); if (webBrowser1.Document != null) { webBrowser1.Document.Write(string.Empty); } webBrowser1.DocumentText = html; } 

Sin embargo, he encontrado que en mi aplicación actual obtengo una CastException de la línea if(webBrowser1.Document != null) . No estoy seguro de por qué sucede esto, pero he descubierto que si envuelvo todo el bloque if en una captura de prueba, el efecto deseado aún funciona. Ver:

 private void DisplayHtml(string html) { webBrowser1.Navigate("about:blank"); try { if (webBrowser1.Document != null) { webBrowser1.Document.Write(string.Empty); } } catch (CastException e) { } // do nothing with this webBrowser1.DocumentText = html; } 

Así que cada vez que se ejecuta la función de DisplayHtml , recibo una CastException de la sentencia if , de modo que nunca se alcanza el contenido de la statement if. Sin embargo, si hago un comentario sobre la statement if para no recibir la CastException , entonces el control del navegador no se actualiza. Sospecho que hay otro efecto secundario del código detrás de la propiedad del documento que causa este efecto a pesar de que también arroja una excepción.

De todos modos, espero que esto ayude a la gente.

En lugar de navegar en blanco, puede hacer

 webBrowser1.DocumentText="0"; webBrowser1.Document.OpenNew(true); webBrowser1.Document.Write(theHTML); webBrowser1.Refresh(); 

No es necesario esperar eventos o cualquier otra cosa. Puede comprobar MSDN para OpenNew, mientras que he probado la asignación inicial de DocumentText en uno de mis proyectos y funciona.

Por algún motivo, el código suministrado por m3z (con el DisplayHtml(string) ) no funciona en mi caso (excepto la primera vez). Siempre estoy mostrando html desde la cadena. Aquí está mi versión después de la batalla con el control WebBrowser:

 webBrowser1.Navigate("about:blank"); while (webBrowser1.Document == null || webBrowser1.Document.Body == null) Application.DoEvents(); webBrowser1.Document.OpenNew(true).Write(html); 

Trabajando todo el tiempo para mi Espero que esto ayude a alguien.

La solución simple, lo he probado

 webBrowser1.Refresh(); var str = "" + sender.ToString() + ""; webBrowser1.DocumentText = str; 

webBrowser.NavigateToString (yourString);

Aquí hay un pequeño código. Funciona (para mí) en cualquier cambio subsiguiente del código html del control WebBrowser. Puede adaptarlo a sus necesidades específicas.

  static public void SetWebBrowserHtml(WebBrowser Browser, string HtmlText) { if (Browser != null) { if (string.IsNullOrWhiteSpace(HtmlText)) { // Putting a div inside body forces control to use div instead of P (paragraph) // when the user presses the enter button HtmlText = @"    
"; } if (Browser.Document == null) { Browser.Navigate("about:blank"); //Wait for document to finish loading while (Browser.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); System.Threading.Thread.Sleep(5); } } // Write html code dynamic Doc = Browser.Document.DomDocument; Doc.open(); Doc.write(HtmlText); Doc.close(); // Add scripts here /* dynamic Doc = Document.DomDocument; dynamic Script = Doc.getElementById("MyScriptFunctions"); if (Script == null) { Script = Doc.createElement("script"); Script.id = "MyScriptFunctions"; Script.text = JavascriptFunctionsSourcecode; Doc.appendChild(Script); } */ // Enable contentEditable /* if (Browser.Document.Body != null) { if (Browser.Version.Major >= 9) Browser.Document.Body.SetAttribute("contentEditable", "true"); } */ // Attach event handlers // Browser.Document.AttachEventHandler("onkeyup", BrowserKeyUp); // Browser.Document.AttachEventHandler("onkeypress", BrowserKeyPress); // etc... } }

El DisplayHtml (string html) recomendado por m3z funcionó para mí.

En caso de que ayude a alguien, también me gustaría mencionar que inicialmente había algunos espacios en mi HTML que invalidaban el HTML y el texto aparecía como una cadena. Los espacios se introdujeron (alrededor de los corchetes angulares) cuando pegué el HTML en Visual Studio. Entonces, si su texto sigue apareciendo como texto después de probar las soluciones mencionadas en esta publicación, entonces puede valer la pena verificar que la syntax HTML sea correcta.

Una vieja pregunta, pero este es mi comienzo para esta operación.

 If browser.Document IsNot Nothing Then browser.Document.OpenNew(True) browser.Document.Write(My.Resources.htmlTemplate) Else browser.DocumentText = My.Resources.htmlTemplate End If 

Y asegúrese de que cualquier browser.Navigating Evento de navegación NO cancela las URL “sobre: ​​en blanco”. Ejemplo de evento a continuación para el control total de la navegación por WebBrowser .

 Private Sub browser_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles browser.Navigating Try Me.Cursor = Cursors.WaitCursor Select Case e.Url.Scheme Case Constants.App_Url_Scheme Dim query As Specialized.NameValueCollection = System.Web.HttpUtility.ParseQueryString(e.Url.Query) Select Case e.Url.Host Case Constants.Navigation.URLs.ToggleExpander.Host Dim nodeID As String = query.Item(Constants.Navigation.URLs.ToggleExpander.Parameters.NodeID) : :  : : End Select Case Else e.Cancel = (e.Url.ToString() <> "about:blank") End Select Catch ex As Exception ExceptionBox.Show(ex, "Operation failed.") Finally Me.Cursor = Cursors.Default End Try End Sub