2011-03-01 66 views
7

这是场景。我希望使用CKEditor作为表单上的富文本字段,但出于某种原因,我无法从textarea将内容获取到服务器,并返回到没有编码问题的页面。这里是我写的一些小样本程序,试图弄清楚发生了什么。首先,我的视图模型:为什么我不能在ASP.NET MVC中使用HtmlDecode 3

HomeViewModel.cs

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

现在我的控制器:

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

最后,我的观点:

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

不管我做什么,我不能在我的视图中显示Model.Note属性为HTML。当它到达视图时,它是HTML编码的(即<p>等)。这里是形式是什么样子岗前:

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

这里是结果是什么在div下方的“提交”按钮:

​​

我给自己定Visual Studio中的一个断点,它显示为空心尖括号(不在HTML元素上编码,只是字符)。

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

此,当然,是剥离下来测试。我试过对它进行编码,在视图和控制器中对它进行解码无济于事。非常感谢您的帮助!谢谢!

回答

14

默认情况下,所有内容在使用剃须刀时都进行了编码。我想你正在寻找Raw method

使用Fiddler或Firebug检查响应也是一个好主意。

+0

另见http://davidhayden.com/blog/dave/archive/2010/12/27/HtmlRawRazorViewEngine。 aspx – JTew 2011-03-01 02:05:37

+1

好吧,我会的。谢谢! – Mateo 2011-03-01 02:06:02

+0

不错的。在方法上不好的名字,找不到。你不认为寻找“生” – 2011-05-20 14:55:11

2

您还可以使用HtmlString( “”)

4

试试这个:

@Html.DisplayTextFor(modelItem => item.Note) 
相关问题