如何将动态加载的webforms usercontrol转换为mvc razor

时间:2013-02-26 19:15:08

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

我正在将用webforms编写的现有自定义CMS移植到MVC4,理想情况下保持CMS数据库架构和数据不变。我正在使用url来确定请求的页面以及使用的模板。模板主要用于不同的布局和内容“字段”。

在我的网络表单应用中,我有一个基类PageTemplate : UserControl

我有一个default.aspx,它查看请求的路径,从db中提取它,然后使用TemplateId属性动态加载usercontrol,将db内容添加到属性,然后添加到占位符上页

p = CMSPage.Select(fullPath);
myTemplate = LoadControl("~/templates/template_" + p.TemplateId.ToString + ".ascx");
myTemplate.Content = p;
phTemplate.Controls.Add(myTemplate);

在usercontrols Init事件中,我使用来自CMS的内容填充Literal标记 - 这意味着我可以拥有服务器控制按钮和交互并仍然处理回发 - 所有这些都封装在usercontrol中

我有大约20个模板,大多数只是渲染,有些是交互式的。我想迁移到Razor作为视图引擎。

1)基于动态内容加载偏好视图的最佳MVC方式是什么,并将CMS内容作为模型传递给视图?它是一个单独的CMSpage控制器,每个模板都有部分?或者每个模板的控制器?

2)在模板中处理帖子的最结构化MVC方式是什么?单个CMS控制器上的方法是什么?每个模板的控制器?

3)欢迎伪代码!

提前致谢

1 个答案:

答案 0 :(得分:0)

  1. 您可以按照类似的方法使用您的用户控制方法。重定向到一个操作方法,该方法根据模板ID选择要返回的部分视图。 action方法可以获取部分ID并执行return PartialView("View" + templateID.ToString());。也可以使用Html.Action从视图动态加载部分视图。部分视图也可以使用JQuery使用$ .ajax加载并流式传输到客户端,以防您需要动态内容加载。
  2. 在局部视图中定义表单,或者使用一个接受FormCollection的全局局部视图(一种通用的方式来引用已发布的表单)。您可以使用一些返回的ID来确定模板响应。如果可以的话,在模板中使用表单可能会更好,更容易配置。但是,后者会更复杂,但如果你想要一个通用的CMS解决方案,后者是实现这一目标的一种方式。
  3. 没有一个适合所有人的解决方案;只提供一小部分产品就很难提供建议。