如何使用ASP.NET MVC 3和Stackoverflow的Markdown

我一直在研究几个小时,找不到任何真正的来源。 我在ASP.NET MVC 3中build立一个网站,并希望利用StackOverflow使用的Markdown编辑器。 有没有人有一个很好的教程?

你在哪里下载最新的减价? 它写的是什么语言? 我将从哪里开始将其整合到MVC 3项目中? 即使经过了所有的search和阅读,我仍然很困惑。

我遇到了一个网站。 http://daringfireball.net/projects/markdown/但是,这似乎古怪,似乎我将不得不学习一些关于CGI和PERL,我绝对没有经验。 一个JavaScript / jQuery版本将是出色的。 任何想法,链接,参考非常赞赏。

UPDATE

我注意到这个问题得到了相当数量的意见,所以我决定更新一些有用的参考。 我设法让一个Markdown编辑器在CodeTunnel.com上很好地工作,我写了一些关于它的博客。 希望他们帮助任何遇到这个问题的人。

  • MarkdownSharp和编码的HTML
  • JQuery WMD插件
  • find并实施WMD编辑器

Stackoverflow打开了他们的Markdown版本到世界。 它叫做MarkdownSharp ,用C#编写。

有人在这里写了一个HtmlHelper: http : //blog.dantup.com/2011/03/an-asp-net-mvc-htmlhelper-extension-method-for-markdown-using-markdownsharp

如果你正在寻找如何实现一个JavaScript编辑器有一个存在的问题: 将Markitup文本编辑器集成到ASP.NET MVC项目

您可能正在寻找MarkdownSharp

Markdown处理器的开源C#实现,如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> 

我知道这个问题是旧的,但我偶然发现了另一个解决schememarkdowndeep这是非常友好的MVC

它可以通过nuget PM> Install-Package MarkdownDeep.Full进行安装

在C#中降价

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

编辑

1.将提供的js,css,png和htm文件复制到您的服务器上。 根据将这些文件放在服务器上的位置,可能需要更新css文件中的图像URL。

2.更新页面以引用jQuery,MarkdownDeep库和MarkdownDeep css文件(同样,您可能需要更改path)。

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

注意:MarkdownDeepLib.min.js是MarkdownDeep.js,MarkdownDeepEditor.js和MarkdownDeepEditorUI.js的缩小版本。 对于debugging,您可以改为引用这三个文件。

3.将Markdown编辑器插入到您的页面中,如下所示:

 <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都是可选的,如果缺less,插件将创build它们。 但是,如果您这样做,您可能会遇到在加载过程中跳转的页面。 即:build议明确包含它们。

4.调用MarkdownDeep jQuery插件将textarea转换为MarkdownEditor

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

虽然我真的很喜欢他们的产品, 但我并不隶属于markdowndeep的制造商 。 我只是认为他们做了一个好产品

这个问题很老,但我只是在这里留下一个答案,以便将来的读者可以从中受益。

我已经使用MarkdownSharp v1.13,它不会净化你的html输出。 例如,如果input:

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

在您的input字段中,MarkdownSharp的输出包含相同的脚本。 因此它暴露您的网站到XSS漏洞。

阅读从Stackoverflow在PageDown上的文章 :

应该注意的是,就用户input的input而言,Markdown是不安全的。 在Markdown中几乎任何东西都是有效的,特别是像<script>doEvil();</script> 。 这个PageDown仓库包含了Stack Exchange用来清理用户input的两个插件; 请参阅下面的Markdown.Sanitizer.js的描述。

所以,从另外一个angular度来看,也许Markdown并不是要消化你的input,而MarkdownSharp的实现只是符合这些原则。 我应该提到,Stackoverflow在他们的服务器端使用MarkdownSharp。