【问题标题】:ASP.NET MVC - CMS QuestionsASP.NET MVC - CMS 问题
【发布时间】:2011-11-17 02:47:19
【问题描述】:

我正在考虑开发一个包含 CMS 的应用程序。我是一位经验丰富的 Web 表单开发人员,但实际上只是刚刚进入 MVC。

我有几个问题希望你们中的一些人能回答:

首先,我当前的 Web 表单 CMS 允许用户创建一个页面,然后将任意数量的用户控件“拖放”到他们创建的该页面上。我这样做的方法是在数据库中创建一个条目以及路径,然后使用 LoadControl 方法。

我可以看到我可以使用部分视图执行此操作,但部分视图没有代码。如果我可能有 100 个控件可供人们拖放到页面上,这是否意味着控制器中的 ViewBag 需要满足所有 100 个控件的需求,以防它们在视图上使用?例如,一个 Web 表单用户控件将包含以下逻辑:rptItems.DataSource = blah; rptItems.DataBind()

使用 MVC,我假设逻辑将在视图控制器中,并且视图将通过 ViewBag 访问它?我对如何做到这一点有点困惑。

其次,您将如何处理深度路由?

EG:

Store/Products/Category 很好,但是 Store/Products/Category/Delivery/UK 呢?我需要在 global.asax 中为我需要的每条路线设置一条路线吗?在 Web 表单中,我只是调用了 ReWritePath 方法并使用正则表达式自己处理路由。

感谢您花时间阅读本文,并希望能回答我的一些疑问

【问题讨论】:

    标签: asp.net-mvc content-management-system asp.net-mvc-routing


    【解决方案1】:

    对于您的第二个问题(即“深度路由”),您可以在控制器中处理此问题,而不是添加真正的路由。 url 的每个部分都可以通过控制器操作中的RouteData.Values 集合获得。所以,你的路线可能看起来像

    ~/Store/Products/Category/{*params}
    

    假设典型的路由配置,这将调用~/areas/store/controllers/storeController 上的Category(...) 操作方法,然后可以从RouteData.Values 集合中获取deliveryuk

    还有很多其他方法可以解决这个问题——在数据库中存储路由并使用相关的元数据来找到正确的控制器和方法——但我认为这是最简单的。此外,这可能很明显,但如果您在示例中真的只需要“类别”之外的两个参数,则可以使用

    public ActionResult Category(string category, string region)
    {
    ...
    }
    

    还有一条路线:

    ~/store/{controller}/{action}/{category}/{region}/{*params}
    

    DeliveryUK 将分别映射到类别和区域参数。 uk 之外的任何内容仍可通过 RouteData.Values 集合获得。这假设您没有更具体的路线,例如

    ~/store/{controller}/{action}/{category}/{region}/{foo}/{bar}/{long_url}/{etc}
    

    这将是一个更好的匹配。 ({*params} 可能与第二条路线冲突;您必须进行调查以查看是否有问题。)

    第一个问题:

    您可以动态生成视图源并将其作为字符串从控制器返回,从而无需通过 ViewBag 传递大量内容。如果您的 CMS 数据库中的虚拟页面需要包含部分视图,您可以在生成页面时添加对这些组件的引用。 (这可能会也可能不会解决您的问题 - 如果没有,请提供更多信息。)

    【讨论】:

    • 谢谢大卫。路由问题是找到一种解决方案,允许客户端创建任意数量的嵌套 URL。所以,理论上他们可以有 Dir1/Dir2/Dir3/Dir4.... 等等。在网络表单中。我会将每个请求定向到 Page.aspx 文件,然后根据数据库中的 URL 重写路径。
    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多