【问题标题】:.net MVC equivalent to Page.ParseControl().net MVC 等效于 Page.ParseControl()
【发布时间】:2012-01-18 14:38:26
【问题描述】:

我们正在研究将我们的自定义 .net 网络表单 CMS 移植到 MVC。

我们当前 CMS 的一个功能是用户能够将模块(实际上只是 .net 用户控件)添加到富文本编辑器中。然后将这些模块解析到一个容器中。

plc_controls.Controls.Add(Page.ParseControl(description));

其中“描述”是数据库中包含一些普通页面内容的字段,并且可以在标记中包含一个或多个用户控件。

mvc 框架中是如何容纳这种东西的?我对 MVC 不太熟悉,不知道从哪里开始——此时我们只是在调查这一举措是否有意义。

使用示例编辑

目前,用户可以输入如下所示的标记:

<p>Some text</p>
<cms:facilities id="facilities" membertypes="2,3,4" runat="server" />
<p>Some more text</p>

这存储在名为“描述”的单个数据库字段中,在我们的网络表单 CMS 中,我将此描述解析为一个控制容器,如上所述。 cms:facilities 是加载到 web.config 的页面/控件部分的 Web 用户控件。该控件仅在两个段落标记之间呈现设施列表。

【问题讨论】:

  • 简短的回答是,它没有。 ASP.NET MVC 框架中没有自定义控件之类的东西。您很可能可以使用另一种方法获得类似的行为,但我们需要更多信息才能为您提供完整的答案。例如,您的这些用户控件是否依赖于服务器端行为?
  • @rsenna - 很好,如何处理这个一般概念?
  • ASP.NET MVC 框架中最接近 WebForms 用户控件的是“部分视图”。您可能可以从那里开始。
  • @rsenna,是的,我见过这些,但我如何将它们动态呈现到视图中?这确实是需要发生的事情。
  • 我猜你的问题是这样的:用户如何在网络富文本编辑器中添加由我的网站定义的自定义标记?当您使用 WebForms 时,一个有效的答案是使用用户控件和Page.ParseControl。使用 ASP.NET MVC 是可行的...但是你为什么不使用类似markItUp! 的东西呢?它们为您提供了一个完整且免费的标记编辑器,还允许您定义自定义标记。

标签: .net asp.net-mvc-3


【解决方案1】:

我会给你一个正式的答案,基于我在上面的 cmets 中已经说过。也许这会让事情变得更清楚一些。

  1. 将所有用户控件公开为部分视图。
  2. 定义某种特殊标记以呈现您的内容。
  3. 为您的自定义标记实现自定义解析器(或为此使用一些第三方库)。
  4. 根据标记,呈现最终的 HTML,其中包含对用户选择的控件的所有引用。

例如,您可以发布类似这样的内容(使用修改后的BBCode* 解析器):

[p]Some text[/p]
[facilities id="facilities" membertypes="2,3,4"]
[p]Some more text[/p]

事实上,这比发布“带有 ASP.NET 服务器标签的 HTML”安全得多。我确实相信某些黑客可能会使用您当前的富编辑解决方案来发布可以探索某些客户端或服务器端后门的 HTML 代码,但也许我错了......

同样,您不能使用与 ASP.NET WebForms 版本相同的方法 - 在 ASP.NET MVC 中没有服务器标签之类的东西。

当然,这比您以前的 ASP.NET WebForms 解决方案复杂得多。但是 AFAIK 是您应该如何在 ASP.NET MVC 中实现它(除非有一些第三方库能够做到这一点,我不知道)。

另外,很抱歉,如果我没有从一开始就说明清楚 - 英语不是我的第一语言,我在向您解释整个概念时遇到了一些麻烦。

* 有关 .NET 中 BBCode 的实现,请参阅 Codekicker.BBCode。事实上,AFAIK 可以与 markItUp! 集成 - 这将为您提供几乎完整的富编辑器解决方案,而且是免费的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2011-01-29
  • 2017-03-12
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多