none
¿Como leer .txt con código HTML en Razor? RRS feed

  • Pregunta

  • Hola amigos del foro, quisiera hacerles una consulta.

     

    Necesito leer un archivo.txt que contiene un texto con código HTML.

     

    En el controlador consigo leer el Articulo.txt, pero al mandarlo a la vista me muestra el texto y el código HTML que viene junto a él.

     

    Este es el código que tengo en el controlador

    Label lbl1 = new Label();
    
    // Aqui lee el texto del articulo
    StreamReader textarti = new StreamReader(Server.MapPath("~/Content/Articulos/" + Convert.ToString(reader["Articulo"])), System.Text.Encoding.UTF8);
    
    lbl1.Text = textarti.ReadToEnd();
    dato.articulo = lbl1.Text;
                        
    textarti.Close();
    

    dato.articulo --> lo envió a la vista, pero el texto se ve con el código HTML

     

    Cualquier ayuda me es de gran ayuda. Muchas gracias.


    ManOrl Santiago, Chile

    lunes, 15 de febrero de 2016 1:18

Respuestas

  • Esta es la solución para lo que necesitaba

    En el controlador 

    string ruta = Path.Combine(Server.MapPath("~/Content/Articulos/"), Convert.ToString(reader["Articulo"]));
    
    string contenido = System.IO.File.ReadAllText(ruta);
                        
    ViewBag.articulo = contenido;

    y en la vista

    @Html.Raw(HttpUtility.HtmlDecode(@ViewBag.articulo))
    Gracias a todos por la ayuda


    ManOrl Santiago, Chile

    • Marcado como respuesta ManOrl martes, 16 de febrero de 2016 21:48
    martes, 16 de febrero de 2016 21:47

Todas las respuestas

  • >>Necesito leer un archivo.txt que contiene un texto con código HTML.

    desde html no puedes leer un archivo, deberas subirlo al sevidor mediante un upload

    >>En el controlador consigo leer el Articulo.txt, pero al mandarlo a la vista me muestra el texto y el código HTML que viene junto a él.

    como es eso que veo en el codigo de un

    Label lbl1 = new Label();

    en asp.net mvc no hay controles

    el archivos que procesas lo trabjas en un Action en el Controller y lo debes enviar en el Model a la view

    public class xxController : Controller {
    
       public ActionResult Index(){
    
            //no se de donde sale el reader, si es que estabas subiendo el archivo desde el cliente
            string ruta = Path.Combine(Server.MapPath("~/Content/Articulos/"), Convert.ToString(reader["Articulo"]));
    
            string contenido = File.ReadAllText(ruta);
    
            ViewBag.articulo = contenido ;
    
            return View();
    
        }
    
    }
    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 15 de febrero de 2016 1:53
  • Me da un problema con el File.ReadAllText(ruta);

     

    'System.Web.Mvc.Controller.File(byte[], string)' es 'método', que no es válida en el contexto indicado

    Esto es lo que tengo Leandro

    public class ArticuloController : Controller
        {        
    
    private TraeArticulo Trae_Articulo()
            {
    
                TraeArticulo dato = new TraeArticulo();
    
                using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["Cn"].ConnectionString))
                {
                    cnn.Open();
    
                    SqlCommand cmd = new SqlCommand("Articulo_Trae_Articulo", cnn);
                    cmd.CommandType = CommandType.StoredProcedure;
    
                    cmd.Parameters.AddWithValue("@id", Request.QueryString["id"]);
    
                    SqlDataReader reader = cmd.ExecuteReader();
    
                   
                    if (reader.Read())
                    {
                        
                        
    	        dato.titulo = Convert.ToString(reader["titulo"]);		
    	        dato.detalle = Convert.ToString(reader["detalle"]);                    
                       dato.tipocampeonato = Convert.ToString(reader["tipocampeonato"]);
                                          
                        //dato.articulo = Convert.ToString(reader["Articulo"]);
                        
                        
    
                        //no se de donde sale el reader, si es que estabas subiendo el archivo desde el cliente
                        string ruta = Path.Combine(Server.MapPath("~/Content/Articulos/"), Convert.ToString(reader["Articulo"]));
    
                        string contenido = File.ReadAllText(ruta);
    
                        ViewBag.articulo = contenido;
    
                        
    
                       
    
    
                    }
                }
                return dato;
            }
    
           public ActionResult Index()
            {
    
    
                    TraeArticulo trae_articulo = Trae_Articulo();
                    
    
                    ArticuloViewModel model = new ArticuloViewModel()
                    {
                        trae_articulo = trae_articulo
    
                    };
    
                    return View(model);
                }
            
    
    }
    

    Gracias por la ayuda Leandro.


    ManOrl Santiago, Chile

    lunes, 15 de febrero de 2016 2:33
  • tal vez tengas ambigüedades.

    pon lo siguiente

    string contenido = System.IO.File.ReadAllText(ruta);
    

    establece el espacion de nombres completo

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 15 de febrero de 2016 6:57
    Moderador
  • hola

    no definas el metodo Trae_Articulo() dentro del controller, podrias sacarlo a una clase separada

    crea por ejmeplo un .cs nuevo de nombre FileHelper y defines la clase

    public class FileHelper {
    
        private TraeArticulo Trae_Articulo(){    
    
             //codigo
    
       }
    
    }

    entonces en el action invocas la funcionalidad

    public ActionResult Index() {

    FileHelper helper = new FileHelper(); TraeArticulo trae_articulo = helper.Trae_Articulo(); ArticuloViewModel model = new ArticuloViewModel() { trae_articulo = trae_articulo }; return View(model); }

    de esta forma no tendras coques entre los namespace de asp.net mvc y los de system.io

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 15 de febrero de 2016 7:26
  • Hola Leandro,

    Al crear la clase separada (FileHelper) reconoce File.ReadAllText(ruta), pero Request.QueryString["id"] donde obtengo el "id" de un artículo en especifico se me pierde. Además, Server.MapPath dice que no existe en el contexto actual, lo mismo para ViewBag.

    Como dice Sergio Parra, al utilizar

    string contenido = System.IO.File.ReadAllText(ruta);

    funciona, se visualiza el texto, pero sigo viendo los codigos HTML entremedio del texto

    string ruta = Path.Combine(Server.MapPath("~/Content/Articulos/"), Convert.ToString(reader["Articulo"]));
    
    string contenido = System.IO.File.ReadAllText(ruta);
                        
    ViewBag.articulo = contenido;
    

    Convert.ToString(reader["Articulo"]) solo trae el nombre "1010.txt" el cual lo tengo físicamente en una carpeta en el servidor Content/Articulos

    En la versión 2005 con C# se solucionaba todo con un Panel1.Controls.Add(texto.txt), en el cual podía ver el texto con su código html reflejado en él.

    Ejemplo. 

    Actualmente visualizo esto:

    El presidente <strong>Pepito</strong>, se&ntilde;al&oacute; que solo recibir&aacute;n hinchas de su club en el duelo de este domingo

    Pero busco visualizar esto:

    El presidente Pepito, señaló que solo recibirán hinchas de su club en el duelo de este domingo

    Saludos y muchas gracias por la ayuda.




    ManOrl Santiago, Chile

    lunes, 15 de febrero de 2016 15:02
  • Esta es la solución para lo que necesitaba

    En el controlador 

    string ruta = Path.Combine(Server.MapPath("~/Content/Articulos/"), Convert.ToString(reader["Articulo"]));
    
    string contenido = System.IO.File.ReadAllText(ruta);
                        
    ViewBag.articulo = contenido;

    y en la vista

    @Html.Raw(HttpUtility.HtmlDecode(@ViewBag.articulo))
    Gracias a todos por la ayuda


    ManOrl Santiago, Chile

    • Marcado como respuesta ManOrl martes, 16 de febrero de 2016 21:48
    martes, 16 de febrero de 2016 21:47