ckeditor和razor语法模板

ckeditor和razor语法模板,razor,ckeditor,Razor,Ckeditor,我有一个有趣的问题。我有一个发送电子邮件的网站。 电子邮件模板通常是直截了当的,但对于一个客户,他希望我将其公共网站的内容转换为电子邮件友好的html 我不仅想解决他特定网站的问题,还想解决其他未知网站的问题。 所以我记得可以将Razor作为模板引擎运行 长话短说。它正在运行,运行良好。 我的问题归结到这一点。当有人用razor样式为循环编辑模板时,编辑器的行为非常奇怪 你知道怎样才能不让Keckeditor搞砸吗 <table style="width: 100%;" width="10

我有一个有趣的问题。我有一个发送电子邮件的网站。 电子邮件模板通常是直截了当的,但对于一个客户,他希望我将其公共网站的内容转换为电子邮件友好的html

我不仅想解决他特定网站的问题,还想解决其他未知网站的问题。 所以我记得可以将Razor作为模板引擎运行

长话短说。它正在运行,运行良好。 我的问题归结到这一点。当有人用razor样式为循环编辑模板时,编辑器的行为非常奇怪

你知道怎样才能不让Keckeditor搞砸吗

<table style="width: 100%;" width="100%">
<tbody>
@foreach (var row in body.indexPageRow) { 
foreach (var cell in row.teaser) {
    <tr>
        <td class="row">@Raw(cell.teaserContent.a.Html)</td>
        <td class="row">@Raw(cell.teaserContent.div.InnerHtml)</td>
    </tr>
    }}
</tbody>
</table>

@foreach(body.indexPageRow中的var行){
foreach(行中的变量单元格。摘要){
@原始(cell.trisercontent.a.Html)
@原始(cell.teaserContent.div.InnerHtml)
}}
上述代码保存在ckeditor中时,将删除razor信息并成为空表

<table style="width: 100%;" width="100%">
    <tbody></tbody>
</table>

你不能

浏览器将重新排列这些内容:


//  
@foreach(body.indexPageRow中的var行){
foreach(行中的变量单元格。摘要){
@原始(cell.trisercontent.a.Html)
@原始(cell.teaserContent.div.InnerHtml)
}}

我能想到的实现这一点的唯一方法是将html注释与razor注释结合使用

最初,您可以这样编写razor模板:

@{
布局=空;
}
指数
XY
@**@
@Html.Raw(x)
@Html.Raw(y)
@**@
上面的代码是有效的,将无错误地呈现。但是,当您将其放入html编辑器时,浏览器将对其进行重新排列,因此您需要在显示以进行编辑之前对其进行更改,以便删除razor注释,只保留html注释

因此,一旦您通过将
@**
的所有实例替换为
-->
来删除razor注释,您应该具有以下内容

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
<table>
<tbody>
    <tr><td>X</td><td>Y</td></tr>
<!--
    @for (var x = 1; x < 5; x++) { 
    for (var y = 1; y < 5; y++) {
-->
    <tr>
        <td class="row">@Html.Raw(x)</td>
        <td class="row">@Html.Raw(y)</td>
    </tr>
<!--
    }
}
-->
</tbody>
</table>
</body>
</html>

指数
XY
@Html.Raw(x)
@Html.Raw(y)
这将在html编辑器中呈现,不会像Alfonso所指出的那样被浏览器弄乱,JSFIDLE就是一个例子

编辑完成后,您需要捕获html并通过将
的所有实例替换为
@*-->*@
重新应用razor注释

在html进入ckeditor之前和之后拦截它是相当直接的,并且有很好的文档记录。我发现下面的文章解释了如何在提交时获取ckeditor内容

下面的问题也涉及这一点


为什么要用ckeditor编辑模板?您认为WYSIWYG循环如何工作?非常好。拯救我的一天
<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
<table>
<tbody>
    <tr><td>X</td><td>Y</td></tr>
<!--
    @for (var x = 1; x < 5; x++) { 
    for (var y = 1; y < 5; y++) {
-->
    <tr>
        <td class="row">@Html.Raw(x)</td>
        <td class="row">@Html.Raw(y)</td>
    </tr>
<!--
    }
}
-->
</tbody>
</table>
</body>
</html>