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

Posted

技术标签:

【中文标题】如何使用 ASP.NET MVC 3 和 Stack Overflow 的 Markdown【英文标题】:How to use ASP.NET MVC 3 and Stack Overflow's Markdown 【发布时间】:2011-07-16 07:25:10 【问题描述】:

我找不到任何真正的来源。我正在 ASP.NET MVC 3 中构建一个站点,并希望利用 Stack Overflow 使用的 Markdown 编辑器。谁有好的教程?

你在哪里下载最新的markdown?它是用什么语言写的?我将从哪里开始将其集成到 MVC 3 项目中?即使在我完成了所有的搜索和阅读之后,我仍然很困惑。

我遇到了this site。但这似乎太老了,而且我似乎必须学习一些我完全没有经验的 CGI 和 Perl。 javascript/jQuery 版本会很棒。

更新

我注意到这个问题获得了相当多的意见,所以我决定用一些有用的参考来更新它。我设法让 Markdown 编辑器在我的网站上运行良好,并写了一些关于它的博客。

MarkdownSharp and Encoded html JQuery WMD Plugin Finding and implementing the WMD editor

【问题讨论】:

*** 使用 PageDown 客户端 Markdown 库。代码在这里:code.google.com/p/pagedown/source/browse 【参考方案1】:

*** 向全世界开源了他们的 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

【讨论】:

【参考方案2】:

您可能正在寻找MarkdownSharp

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

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

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

    public ActionResult FormatMarkdown(string markdownText)
    
        var md = new MarkdownSharp.Markdown();
        string html = md.Transform(markdownText);
        return Json(html, JsonRequestBehavior.AllowGet);
    
    

    在您的客户端视图中:

    @Html.TextArea("mdText", new  rows = 12, cols = 60 )
    <div id="mdFormatted"></div>
    

    和客户端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);
       )
    

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

【讨论】:

虽然另一个答案是真正让我走上正轨的原因,但我也非常感谢这一点。谢谢:) +1 非常感谢 sn-ps :D【参考方案3】:

我知道这个问题很老,但我偶然发现了另一个解决方案markdowndeep,它对 MVC 非常友好

可以通过nuget安装PM> Install-Package 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.调用MarkdownDeep jQuery插件将textarea转换为MarkdownEditor

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

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

【讨论】:

谢谢。这确实有效。但不幸的是,编辑器并不是真正可定制的。例如,您不能停用预览窗格。如果您删除它,它是动态创建的。所以我会通过...【参考方案4】:

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

我使用了 MarkdownSharp v1.13,它确实清理您的 html 输出。例如,如果您键入:

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

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

从 PageDown 上的***'s article 阅读此内容:

值得注意的是,就用户输入的输入而言,Markdown 并不安全。几乎任何东西在 Markdown 中都是有效的,尤其是像 &lt;script&gt;doEvil();&lt;/script&gt; 这样的东西。这个 PageDown 存储库包括 Stack Exchange 用来清理用户输入的两个插件;请参阅下面对 Markdown.Sanitizer.js 的描述。

因此,从其他角度来看,也许 Markdown 一开始就不应该清理您的输入,而 MarkdownSharp 的实现只是符合这些原则。我应该提到 *** 确实在他们的服务器端使用 MarkdownSharp。

【讨论】:

我不相信他们不再使用 MarkdownSharp,但我可能是错的。

以上是关于如何使用 ASP.NET MVC 3 和 Stack Overflow 的 Markdown的主要内容,如果未能解决你的问题,请参考以下文章

MVC(ASP.NET MVC)带3层架构如何协同工作?

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

如何在 ASP.NET MVC 5.2.3 和 Katana 中正确设置双重身份验证?

这是如何使用 Entity Framework Core 和 ASP.NET Core MVC 2.2+ 和 3.0 创建数据传输对象 (DTO)

我们如何使用 EF 在 ASP.Net MVC 应用程序中创建 3 层架构?

如何使用 SignalR 从 ASP.NET MVC 3 通知 Web 客户端 MSMQ 任务已完成