如何在@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.RawTextAreaFor 一起使用 - 检查此问题是否与您的问题相似:github.com/summernote/summernote/issues/1481。 错误是“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。”。我正在寻找您添加的链接。 【参考方案1】:

Html.Raw 方法返回 System.Web.IHtmlString,我认为您需要的只是传递包含 HTML 标签的 string 属性(AFAIK Html.Raw 助手不能在其他 HTML 助手中使用,如 DisplayForTextBoxFor )。

可以在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 内容。

&lt;div class="textarea"&gt; @Html.Raw(Model.NOTE) &lt;/div&gt;

【讨论】:

以上是关于如何在@Html.TextAreaFor() 中使用@Html.Raw()的主要内容,如果未能解决你的问题,请参考以下文章

这是一个有效的模型吗?

如何在 JSF 2.0 中使会话无效?

如何在 TypeScript 中使装饰器类型安全?

如何在 Flutter 的 tabbarwiew 中使 webview 可滚动

如何在 SwiftUI 中使列表更宽?

如何在 RowsFragment 中使行的标题始终可见