2011-03-01 29 views
7

İşte senaryo. Bir form üzerinde zengin bir metin alanı için CKEditor kullanmak istiyorum, ancak herhangi bir nedenle ben textarea içeriğini sunucuya ve kodlama sorunları olmadan sayfaya geri alamıyorum. Burada neler olup bittiğini anlamaya çalışmak için yazdığım küçük örnek program. Birincisi, benim bakış modeli:Neden ASP.NET MVC 3'te HtmlDecode yapamıyorum

HomeViewModel.cs

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

Şimdi benim denetleyicisi:

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); 
     } 
    } 
} 

Ve nihayet, benim görünümü:

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> 
} 

olursa olsun benim yaptığım, benim görünümünde html olarak Model.Note özelliği gösteremez. Görünüşe ulaştığında, HTML kodlanmış (yani <p> vs ...). İşte formu öncesi sonrası neye benzediği: Ben kurdum

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

: Burada

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

Ve sonuç "Gönder" düğmesine altında div budur Visual Studio içinde bir kesme noktası ve çıplak açılı ayraçlar (HTML öğelerinde kodlama yok, yalnızca karakterler) olarak gösterir.

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

Bu

, tabii ki, tam olmayan bir testtir. Ben görünümünde ve boşuna denetleyici hem Çözümün, bunu kodlayan denedim. Yardımınız için çok minnettarım! Teşekkürler!

cevap

14

Tıraş bıçağı kullandığınızda varsayılan olarak her şey kodlanır. Bence Raw method'u arıyorsun.

Ayrıca Fiddler veya Firebug kullanarak tepkisini kontrol etmek iyi bir fikir olacaktır.

+0

Ayrıca http://davidhayden.com/blog/dave/archive/2010/12/27/HtmlRawRazorViewEngine bakın. aspx – JTew

+1

Eh, olacağım. Teşekkürler! – Mateo

+0

İyi biri. Metot metodunda yanlış isim, bulmak için har. Sen aramaya sanmıyorum "ham" –

2

Ayrıca HtmlString kullanabilirsiniz ("")

4

bu deneyin:

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