4

興味深い問題があります。私は電子メールを送信するウェブサイトを持っています。多くの場合、メール テンプレートは簡単ですが、あるクライアントの場合、公開 Web サイトのコンテンツをメールに適した HTML に変換するように依頼されました。

彼の特定の Web サイトの問題だけでなく、他の未知の Web サイトの問題も解決したいと考えています。そこで、Razor をテンプレート エンジンとして実行できることを思い出しました。

簡単に言えば。それはうまく機能しています。私の問題はこれに帰着します。誰かがループ用の剃刀スタイルでテンプレートを編集すると、Ckeditor は非常に奇妙な動作をします。

CKEditor が台無しにならないようにする方法はありますか?

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

上記のコードを ckeditor に保存すると、カミソリ情報が削除され、空のテーブルになります

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

2 に答える 2

4

これを達成するために私が考えることができる唯一の方法は、かみそりコメントと組み合わせて html コメントを使用することです。

最初に、かみそりテンプレートを次のように作成します。

@{
    Layout = null;
}

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

上記のコードは有効で、エラーなしでレンダリングされます。ただし、html エディターに配置すると、ブラウザーによって再配置されるため、編集用に表示される直前に、カミソリ コメントが削除され、html コメントのみが残るように変更する必要があります。

@*<!--*@したがって、のすべてのインスタンスとwith<!--のすべてのインスタンスを置き換えてカミソリ コメントを削除する@*-->*@-->、次のようになります。

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

これはhtmlエディターでレンダリングされ、Alfonsoが指摘したようにブラウザーによって混乱することはありません.jsfiddle http://jsfiddle.net/wPGLd/3/の例

編集が完了したら、html をキャプチャし、すべての with のインスタンスと with のすべてのインスタンスを置き換えることによって、カミソリ コメントを再適用する必要があります<!--@*<!--*@-->@*-->*@

ckeditor に入る前後の html をインターセプトするのはかなり簡単で、十分に文書化されています。送信時にckeditorコンテンツを取得する方法について少し説明している次の記事を見つけました

フォーム送信時に CKEditor コンテンツを更新する方法 – OnAfterLinkedFieldUpdate FCKEditor と同等

次の質問もこれをカバーしています

CKEditor プラグインで保存する直前にエディターの内容を更新する

于 2013-09-10T11:29:51.893 に答える
0

できません。

ブラウザーはこれらのコンテンツを再配置します: http://jsfiddle.net/wPGLd/

<!DOCTYPE html>
<html>
<head>
<script type='text/javascript'>//<![CDATA[ 
window.onload=function(){
alert(document.body.innerHTML)
}//]]>  
</script>
</head>
<body>
  <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>

</body>
</html>
于 2013-05-03T07:51:26.603 に答える