2011-03-16 22 views
70

我一直在研究幾個小時,無法找到任何真正的來源。我正在ASP.NET MVC 3中構建一個站點,並希望利用StackOverflow使用的Markdown編輯器。有人有一個很好的教程嗎?如何使用ASP.NET MVC 3和Stackoverflow的Markdown

你在哪裏下載最新的減價?它是用什麼語言寫的?我將從哪裏開始將其整合到MVC 3項目中?即使在我做完所有的搜索和閱讀之後,我仍然很困惑。

我遇到了一個網站。 http://daringfireball.net/projects/markdown/但是這看起來古怪而古怪,看起來我必須學習一些關於CGI和PERL的知識,而這些我完全沒有經驗。一個JavaScript/jQuery版本將會非常出色。任何想法,鏈接,參考非常感謝。

UPDATE

我注意到這個問題,越來越的意見相當數量的,所以我決定用一些有益的參考,以更新它。我設法讓一個Markdown編輯器在CodeTunnel.com上很好地工作,我寫了一些關於它的博客。希望他們幫助任何遇到這個問題的人。

+0

StackOverflow使用PageDown客戶端的Markdown庫。代碼在這裏:https://code.google.com/p/pagedown/source/browse/ – 2014-07-01 01:54:06

回答

41

您可能正在尋找MarkdownSharp

開源C#實現Markdown處理器,與Stack Overflow一樣。

將其整合到一個MVC應用程序:

  1. 在之前或共同控制,添加下面的操作方法

    public ActionResult FormatMarkdown(string markdownText) 
    { 
        var md = new MarkdownSharp.Markdown(); 
        string html = md.Transform(markdownText); 
        return Json(html, JsonRequestBehavior.AllowGet); 
    } 
    
  2. 在您的客戶端視圖

    @Html.TextArea("mdText", new { rows = 12, cols = 60 }) 
    <div id="mdFormatted"></div> 
    
  3. 和客戶端JS :

    $(function() { 
        var mdText = $("#mdText"); 
        var mdFormatted = $("#mdFormatted"); 
        function setFormatted(data) { 
         mdFormatted.html(data); 
        }; 
        mdText.toObservable("keypress") 
        .Throttle(200) 
        .Subscribe(function() { 
         $.getJSON("@VirtualPathUtility.ToAbsolute("~/Util/FormatMarkdown/")", { 
          markdownText: mdText.val() 
          }, setFormatted); 
        }) 
    
  4. 下載RxJs(從MSDN),幷包括以下兩個js文件

    <script src="@Url.Content("~/Scripts/rx.js")" type="text/javascript"></script>  
    <script src="@Url.Content("~/Scripts/rx.jquery.js")" type="text/javascript"></script> 
    
+0

雖然其他答案是真正讓我走上正軌,但我也非常感謝。謝謝:) +1 – Chev 2011-03-16 04:54:03

+2

+1在您的視圖中使用剃鬚刀; P​​ – 2011-03-16 07:21:54

+0

非常感謝您的摘錄:D – eestein 2013-03-09 15:40:16

8

我知道這個問題是舊的,但我偶然發現了另一種解決方案markdowndeep這是非常友好的與MVC

它可以通過nuget安裝PM>安裝包裝MarkdownDeep.Full

Markdown in C#

// Create an instance of Markdown 
var md = new MarkdownDeep.Markdown(); 
// Set options 
md.ExtraMode = true; 
md.SafeMode = false; 
string output = md.Transform(input); 

Editor

1.複印提供的JS,CSS,PNG和HTM文件到您的服務器。根據將這些文件放在服務器上的位置,您可能需要更新css文件中的圖像URL。

2.更新頁面以引用jQuery,MarkdownDeep庫和MarkdownDeep css文件(同樣,您可能需要更改路徑)。

<link rel="stylesheet" href="mdd_styles.css" 
<script type="text/javascript" src="jQuery-1.4.2.min.js"> 
<script type="text/javascript" src="MarkdownDeepLib.min.js"> 

NB:MarkdownDeepLib.min.js是MarkdownDeep.js,MarkdownDeepEditor.js和MarkdownDeepEditorUI.js的包裝,精縮版。對於調試,您可以改爲引用這三個文件。

3.插入降價編輯器到您的網頁是這樣的:

<div class="mdd_toolbar"></div> 
<textarea cols=50 rows=10 class="mdd_editor"></textarea> 
<div class="mdd_resizer"></div> 
<div class="mdd_preview"></div> 

注:相關的div都是可選的,如果丟失,插件將創建它們。然而,如果你這樣做,你可能會遇到在加載過程中跳轉的頁面。即:建議明確包含它們。

4.Called的MarkdownDeep jQuery插件的文本區域轉換爲MarkdownEditor

$("textarea.mdd_editor").MarkdownDeep({ 
    help_location: "/Content/mdd_help.html", 
    disableTabHandling:true 
}); 

雖然我真的很喜歡他們的產品我不跟markdowndeep的製造商無關。我只是認爲他們做了一個好產品

+1

謝謝。這真的很有用。但不幸的是,編輯並不是真正可定製的。例如,您不能停用預覽窗格。如果您刪除它,它會動態創建。所以我會通過... – 2014-06-03 11:57:59

2

這個問題很舊,但我只是在這裏留下一個答案,以便將來的讀者可以從中受益。

我已經使用MarkdownSharp v1.13,它確實有而不是清理你的html輸出。例如,如果輸入:

<script type="text/javascript">alert("Hacked");</script> 

在輸入字段中,MarkdownSharp的輸出包含相同的腳本。因此它會將您的網站暴露給XSS漏洞。

Stackoverflow's article上PageDown鍵閱讀:

應當指出的是,降價是不是隻要用戶輸入的輸入變爲安全。在Markdown中幾乎所有的東西都是有效的,特別是像<script>doEvil();</script>。這個PageDown存儲庫包含了Stack Exchange用來清理用戶輸入的兩個插件;請參閱下面的Markdown.Sanitizer.js的描述。

因此,從其他角度來看,也許Markdown不應該首先對您的輸入進行消毒,而MarkdownSharp的實現只是符合這些原則。我應該提到Stackoverflow確實在其服務器端使用了MarkdownSharp。

+0

我不相信他們再使用MarkdownSharp,但我可能是錯的。 – Chev 2015-04-07 17:21:39