2011-03-01 16 views
7

Aquí está el escenario. Quiero usar CKEditor para un campo de texto enriquecido en un formulario, pero por alguna razón no puedo obtener los contenidos del área de texto al servidor y volver a la página sin problemas de codificación. Aquí está el pequeño programa de muestra que escribí para tratar de descubrir qué está pasando. En primer lugar, mi vista del modelo:¿Por qué no puedo HtmlDecode en ASP.NET MVC 3

HomeViewModel.cs

namespace CkEditorTest.Models 
{ 
    public class HomeViewModel 
    { 
     [Required] 
     [DataType(DataType.Html)] 
     [Display(Name = "Note")] 
     public string Note { get; set; } 
    } 
} 

Ahora mi controlador:

HomeController.cs

using System.Web.Mvc; 
using CkEditorTest.Models; 

namespace CkEditorTest.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(new HomeViewModel()); 
     } 

     [HttpPost] 
     [ValidateInput(false)] 
     public ActionResult Index(HomeViewModel model) 
     { 
      return View(model); 
     } 
    } 
} 

Y por último, mi punto de vista:

Index.cshtml

@model CkEditorTest.Models.HomeViewModel 
@{ 
    ViewBag.Title = "CKEditor Test"; 
} 
@section head 
{ 
    <script type="text/javascript" src="@Url.Content("~/Scripts/ckeditor/ckeditor.js")"></script> 
    <script type="text/javascript" src="@Url.Content("~/Scripts/ckeditor/adapters/jquery.js")"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#Note").ckeditor(); 
     }); 
    </script> 
} 

<h2>CKEditor Test</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.Note)<br /><br /> 
    @Html.TextAreaFor(m => m.Note)<br /> 
    <input type="submit" /> 
} 

@if (!String.IsNullOrEmpty(Model.Note)) 
{ 
<div id="noteText">@Model.Note</div> 
} 

No importa lo que haga, no puede mostrar la propiedadModel.Note como HTML en mi opinión. Cuando llega a la vista, está codificada en HTML (es decir, <p>, etc.). Esto es lo que la forma se parece pre-post:

pre-post http://www.matthewkimber.com/images/so/pre-post.png

Y aquí es lo que el resultado está en el div a continuación el botón "Enviar":

post result http://www.matthewkimber.com/images/so/posted.png

he establecido un punto de interrupción dentro de Visual Studio y se muestra como corchetes angulares desnudos (sin codificación en elementos HTML, solo caracteres).

breakpoint results http://www.matthewkimber.com/images/so/dataInsideTheActionMethod.png

Esto, por supuesto, es la prueba simplificada. Intenté codificarlo, descifrándolo tanto en la vista como en el controlador sin ningún resultado. ¡Tu ayuda es muy apreciada! ¡Gracias!

Respuesta

14

Por defecto, todo está codificado cuando utiliza la afeitadora. Creo que estás buscando el Raw method.

También sería una buena idea verificar la respuesta usando Fiddler o Firebug.

+0

Véase también http://davidhayden.com/blog/dave/archive/2010/12/27/HtmlRawRazorViewEngine. aspx – JTew

+1

Bueno, lo seré. ¡Gracias! – Mateo

+0

Bueno. Mal nombre en el método tho, har para encontrar. No piensas buscar "en bruto" –

2

También puede utilizar HtmlString ("")

4

Prueba esto:

@Html.DisplayTextFor(modelItem => item.Note)