2013-05-03 120 views
4

我有一個有趣的問題。我有一個發送電子郵件的網站。 電子郵件模板通常很直接,但對於一個客戶,他希望我將他的公共網站上的內容轉換爲電子郵件友好的HTML。ckeditor和剃刀語法模板

我想不只是爲他的特定網站解決問題,而是爲其他未知的網站解決問題。 所以我記得你可以運行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> 
+0

爲什麼你要編輯與CKEditor的模板?你會如何期待WYSIWYG循環的工作? – Eric 2013-09-11 07:03:59

回答

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

我能想到的唯一的方式來實現,這將是與剃刀意見一起使用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註釋。

所以,一旦你與-->取出用<!--更換的@*<!--*@所有實例的@*-->*@剃刀意見和所有情況下,您應該具備以下

<!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所指出的那樣,瀏覽器會導致瀏覽器崩潰http://jsfiddle.net/wPGLd/3/

編輯完成後,您需要捕獲html並重新應用剃鬚刀註釋,方法是將所有實例的<!--@*<!--*@@*-->*@

之前,它進入的CKEditor是相當簡單的,有據可查後攔截的HTML -->所有實例。我發現下面的文章解釋了一些關於如何獲得在CKEditor的內容提交

How to update CKEditor content on form submit – equivalent of OnAfterLinkedFieldUpdate FCKEditor

下面的問題還包括該

Update editor content immediately before save in CKEditor plug-in