如何在@Html.TextAreaFor() 中使用@Html.Raw()
Posted
技术标签:
【中文标题】如何在@Html.TextAreaFor() 中使用@Html.Raw()【英文标题】:How to use @Html.Raw() in @Html.TextAreaFor() 【发布时间】:2018-06-30 20:21:47 【问题描述】:我正在使用summernote添加图像、视频、文本。另外,我将图像或视频保存为 html 代码,它是类型字符串到数据库。当我从数据库中检索视频或图像以显示在 Summernote 上时,需要将近 5 分钟,我不知道为什么。但是,当我从数据库中检索文本以显示在 Summernote 上时,没有问题。
这是模型
public class Article
[AllowHtml]
[Column(TypeName = "varchar(MAX)")]
public string Content get; set;
这里是 Summernote 编辑器的视图
@Html.TextAreaFor(x => Model.Content, new @class = "", placeholder = @Blog.Helper.Resources.Content, @id = "summernote_1" )
另外,如果我在 View 中使用下面的代码
<div id="summernote_1">@Html.Raw(Model.Content)</div>
显示视频或图像没有问题,但我无法编辑summernote。当我编辑 Summernote 时,Model.Content 变为空。
如果我在 View 中使用下面的代码
@Html.TextAreaFor(x => Model.Content, new @class = "", placeholder = @Blog.Helper.Resources.Content, @id = "summernote_1" )
编辑summernote没问题,但显示视频或图像需要将近5分钟。
由于这些原因,我试图在 View 中使用下面的代码,但是下面的代码出错了。
@Html.TextAreaFor(x => Html.Raw(Model.Content), new @class = "", placeholder = @Blog.Helper.Resources.Content, @id = "summernote_1" )
我可以在 html.TextAreaFor 中使用 html.raw 吗?或者我可以为这个问题做些什么来显示视频或图像并编辑summernote。 对不起我的英语不好,我希望有人可以帮助我。
【问题讨论】:
“代码出错” - 发现什么错误?我认为您不能将Html.Raw
与 TextAreaFor
一起使用 - 检查此问题是否与您的问题相似:github.com/summernote/summernote/issues/1481。
错误是“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。”。我正在寻找您添加的链接。
【参考方案1】:
Html.Raw
方法返回 System.Web.IHtmlString
,我认为您需要的只是传递包含 HTML 标签的 string
属性(AFAIK Html.Raw
助手不能在其他 HTML 助手中使用,如 DisplayFor
或 TextBoxFor
)。
可以在TextAreaFor
之前将HttpUtility.HtmlDecode
用于Content
属性,如本示例所示(尤其是在HTML 标记在不知不觉中编码的情况下):
@model Article
@
Model.Content = HttpUtility.HtmlDecode(Model.Content);
@Html.TextAreaFor(x => x.Content, new @class = "", placeholder = @Blog.Helper.Resources.Content, @id = "summernote_1" )
通过使用这种方式,您可以从 viewmodel 的字符串属性正确渲染 HTML 标签,而不会丢失模型绑定。
【讨论】:
不幸的是,它可以编辑成功,但同样的问题正在发生。显示图像或视频时,需要花费大量时间。 谢谢,HttpUtility.HtmlDecode 正是我想要的!【参考方案2】:.textarea 内边距:2px; 宽度:250 像素; 高度:200px; 边框:实心 1px #e0e0eb; 溢出:滚动; 溢出-y:滚动; 溢出-x:隐藏;
在包含类“textarea”的 div 中使用 @Html.Raw() 编写您的 html 内容。
<div class="textarea"> @Html.Raw(Model.NOTE) </div>
【讨论】:
以上是关于如何在@Html.TextAreaFor() 中使用@Html.Raw()的主要内容,如果未能解决你的问题,请参考以下文章