2011-10-07 10 views
60

¿Hay otras formas en que puedo devolver html sin procesar desde el controlador? A diferencia de simplemente usar viewbag. como a continuación:asp.net mvc3 devuelve html sin procesar para ver

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.HtmlOutput = "<HTML></HTML>"; 
     return View(); 
    } 
} 

@{ 
    ViewBag.Title = "Index"; 
} 

@Html.Raw(ViewBag.HtmlOutput) 
+0

Admito que hay muchas razones para inyectar html directamente, pero me preguntaba por qué estaba en este caso. – Rikon

+3

Tengo un código heredado que genera marcado de un dll. – River

Respuesta

112

No tiene sentido hacer eso, porque View debe generar html, no el controlador. Pero de todos modos, se puede usar Controller.Content method, que le da la capacidad para especificar html consecuencia, también de tipo de contenido y la codificación

public ActionResult Index() 
{ 
    return Content("<html></html>"); 
} 

O usted podría utilizar el truco construido en el marco de asp.net-mvc - hacer que la cadena de acción de retorno directamente. Entregará contenidos de cadenas en el navegador de los usuarios.

public string Index() 
{ 
    return "<html></html>"; 
} 

De hecho, para cualquier resultado que no sea la acción ActionResult, marco intenta serializar en cadena y escribir la respuesta.

+0

Estoy de acuerdo con la vista de generación de html. mi pensamiento de contenido se genera a partir de un DLL heredado. Si el controlador no es el lugar correcto para invocar, ¿entonces tal vez el modelo? – River

+0

Eso es interesante sobre el uso de un tipo de cadena de retorno. ¿Eso siempre ha funcionado? –

+0

Sí. Todo lo que no sea ActionResult se convierte en cadena y se devuelve la respuesta – archil

1

Eso se ve bien, a menos que quiera pasarlo como cadena Modelo

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     string model = "<HTML></HTML>"; 
     return View(model); 
    } 
} 

@model string 
@{ 
    ViewBag.Title = "Index"; 
} 

@Html.Raw(Model) 
7

simplemente crean una propiedad en su vista del modelo de tipo MvcHtmlString. No necesitarás Html.Raw tampoco.

+0

Gracias. No usaste exactamente lo que dijiste. Lo que dijiste me ayudó a descubrir usando [DataType.Html] – Dexter

3

darle una oportunidad a retorno de arranque mensaje de alerta, esto funcionó para mí

return Content("<div class='alert alert-success'><a class='close' data-dismiss='alert'> 
&times;</a><strong style='width:12px'>Thanks!</strong> updated successfully</div>"); 

Nota: No se olvide de añadir arranque css y js en su página de vista

esperanza ayuda alguien.

+0

Gracias, realmente me ayudó :) – rentire

-1

En el controlador puede utilizar MvcHtmlString

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     string rawHtml = "<HTML></HTML>"; 
     ViewBag.EncodedHtml = MvcHtmlString.Create(rawHtml); 
     return View(); 
    } 
} 

en su opinión, puede simplemente usar esa propiedad dinámica que se establece en el controlador, como a continuación

<div> 
     @ViewBag.EncodedHtml 
</div> 
-1

controlador

public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
     ViewBag.show = false; 
     return View(); 
     } 
     } 

Visitas

@{ 
     ViewBag.Title = "Index"; 
     } 

    @if (ViewBag.show == false){ 
     <div > 
      @*your code*@ 
     </div> 
     }