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

时间:2011-03-16 04:06:06

标签: c# jquery asp.net-mvc asp.net-mvc-3 markdown

我现在已经研究了几个小时,但却找不到任何真正的资料来源。我正在ASP.NET MVC 3中构建一个站点,并希望利用StackOverflow使用的Markdown编辑器。有没有人有一个很好的教程?

你在哪里下载最新的降价?用什么语言写的?我将从哪里开始将其集成到MVC 3项目中?即使经过我所做的所有搜索和阅读,我仍然很困惑。

我遇到过一个网站。 http://daringfireball.net/projects/markdown/但这看起来非常古老,似乎我必须学习一些关于CGI和PERL的东西,我绝对没有经验。一个javascript / jQuery版本将是出色的。任何想法,链接,参考都非常感激。

更新

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

4 个答案:

答案 0 :(得分:61)

Stackoverflow向全世界开放了他们的Markdown版本。它名为MarkdownSharp,用C#编写。

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

如果您正在寻找如何实现javascript编辑器,则存在一个问题: Integrate Markitup text editor to ASP.NET MVC project

答案 1 :(得分:42)

您可能正在寻找MarkdownSharp

  

Markdown处理器的开源C#实现,如Stack Overflow上所述。

将其集成到MVC应用程序中:

  1. 在until或common控制器中,添加以下操作方法

    public ActionResult FormatMarkdown(string markdownText)
    {
        var md = new MarkdownSharp.Markdown();
        string html = md.Transform(markdownText);
        return Json(html, JsonRequestBehavior.AllowGet);
    }
    
  2. 客户端视图中的
  3. @Html.TextArea("mdText", new { rows = 12, cols = 60 })
    <div id="mdFormatted"></div>
    
  4. 和客户端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);
       })
    
  5. 下载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>  
    

答案 2 :(得分:8)

我知道这个问题已经过时了,但我偶然发现了另一个与MVC非常友好的解决方案markdowndeep

可以通过nuget PM&gt;进行安装。安装包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">

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

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

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

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

虽然我非常喜欢他们的产品我并不隶属于markdowndeep 的制造商。我只是觉得他们做了一个好产品

答案 3 :(得分:2)

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

我使用过MarkdownSharp v1.13, NOT 清理你的html输出。例如,如果键入:

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

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

在PageDown上的Stackoverflow's article阅读:

  

应该注意,就用户输入的输入而言,Markdown并不安全。几乎所有东西在Markdown中都有效,特别是<script>doEvil();</script>之类的东西。此PageDown存储库包含Stack Exchange用于清理用户输入的两个插件;请参阅下面的Markdown.Sanitizer.js说明。

因此,从其他角度来看,也许Markdown不应该首先清理你的输入,而MarkdownSharp的实现只是符合这些原则。我应该提一下,Stackoverflow确实在服务器端使用了MarkdownSharp。