【问题标题】:ASP.NET MVC Dynamic DesignASP.NET MVC 动态设计
【发布时间】:2013-02-22 18:11:41
【问题描述】:

我最近开始学习ASP.NET Model View Controller (MVC)。它在网站上采用的方法非常独特,我注意到dynamics 的潜力。这将大大改善维护。

但我可以看出过度使用dynamics 可能会带来多大的坏处,尤其是当您偏离strongly typed model 时。所以我的问题是……

我正在创建一个布局,但我希望布局为fluid。我希望设计可以很容易地改变而不影响我的逻辑。我知道您可以创建Master PagesMaster Content Pages,它们可以轻松容纳大部分布局。除非这对我的使用仍有限制。

有没有办法将这些Master PagesMaster Content Pages 变成真正的动态实体?本质上,designer 可以使用我创建的所见即所得字段,该字段允许修改整个网站?

我最初的想法是存储创建一个dynamic layout,其中每个View 引用一个数据库;无论这些变量是什么,都会创建布局。但我不确定这是最好的方法吗?

关于最佳方法的任何建议或想法?

请我不打算开始辩论,但如果人们能指出我可以研究的方向,那么这种实施方法将非常有帮助。这样我就可以找到适合dynamic layout 的项目需求的最佳解决方案。


更新:

为了介绍这个项目的背景,我的公司有几个子公司。这些子公司将使用该应用程序,但希望为特定公司量身定制。为了避免过多的设计布局,我想abstract 那部分。

这样我的logic 不会受到影响,但该软件的模块足以满足我们所有子公司的设计需求,而我不必自定义其中的每一个或冒着设计师影响logic 的风险。

感谢您的帮助。


更新:

为了帮助澄清,目标是允许User Interface 与应用程序分离。在普通的Windows Application 中,我会使用Inversion Of Control 来帮助将接口和结构与初始逻辑分开。

这种解耦方法很有帮助,目标是在这种情况下解耦接口Razor Syntax,这将设计创建结构。如果您有网站:

<html>
  <div id="Page-Container">
    <div id="Header" />
    <div id="Content" />
    <div id="Footer" />
  </div>
</html>

该结构将是静态的,但在我的情况下,我希望它是 dynamic。这样我的逻辑可以通过结构抽象出来,但设计者可以随意操作和更改page layout

【问题讨论】:

  • 看看 Orchard Project,人们可以在其中提供自己的主题。它有一个区域的概念,每个主题都可以公开。
  • 这听起来类似于 Dot Net Nuke。布局的某些部分被分解为模块。

标签: c# asp.net-mvc dynamic


【解决方案1】:

不确定我是否完全理解您的要求......但也许以下前提会引起您的兴趣?

@model CompanyName.LayoutModel
<html>
    <body>
    @foreach(string view in Model.Views)
    {
        @Html.Partial(view);
    }
    </body>
</html>

这将取决于您使用的任何 UI 框架是如何工作的。想法是您向 Razor 呈现一个对象,该对象仅包含 Razor 然后部分呈现的视图集合。为了。

您可能希望检查http://www.google.com/ig 之类的网站,而不是使用 ASP.NET MVC 进行初始服务,而是使用 ajax 为用户读取自定义布局(如果您在主页中编辑设置,则可以完全自定义布局以及您在主页上获得什么样的新闻),然后用来自进一步 ajax 调用的数据填充这些布局。
对我来说,这听起来更灵活,每个 AJAX 调用都可以是 ASP.NET MVC 方法(返回剃须刀页面的输出),而 javascript 可以直接将 HTML 插入 DOM。这也为您在调用可能需要更长时间执行或依赖 3rd 方通信的方法时提供了更大的灵活性,因为它允许您更轻松地呈现“加载”动画并报告错误。

【讨论】:

  • 这篇文章很棒,我会去看看。
  • 这有点烦人,因为现在我又在寻找这个功能......我找不到它!这是非常悲伤的,它非常漂亮。但它背后的技术前提仍然存在,我无法向你展示真正的交易。我相信 Google 新闻的工作方式与此相同,但编辑远没有那么性感。
  • 如果你找到了,我很想看看。
  • 哦,等等,我找到了开始这一切的原始实现。还记得 iGoogle 吗? google.com/ig.
  • 这显然是 bbc 模仿的,但用户并没有真正使用它,而且令人困惑,以至于他们在几年后重新设计了它。
【解决方案2】:

听起来您正在寻找某种 CMS。已经有一堆CMS build for ASP.NET MVC,但是您可以构建自己的,通过将视图存储在数据库中来满足您的所有需求。在这种情况下,this article 可能会为您指明正确的方向。

【讨论】:

  • 我希望避免使用 CMS,某些方面的表现类似,但我想避免使用它们。主要是因为它们是通用的,而不是特定于业务的。我知道 Umbraco 是 MVC,但你知道有哪些不是那么广泛的吗?
【解决方案3】:

在剃须刀中,您可以轻松做到这一点。 您必须有一个用于布局模板的模型并将其绑定到您的剃须刀布局中。 布局的每个部分都可以在@if razor 块中,它检查模型的字段并动态检查 创建每个部分。

【讨论】:

  • 感谢您的帖子。那么使用Razor 检查模型中的字段,以便dynamically generates 该模型中的每个单独方面?我理解正确吗?
  • 明确一点,您要做的是为控制器操作动态生成视图,而不是为每个视图手动创建剃刀模板?
  • 我想做的是允许动态更改Razor Layout。我看不到@ViewBag 在整个代码中都充满了益处。但我希望Divs 能够即时更改或添加。如果没有意义,我会尝试更好地改写它。
  • 是的,您可以在果园项目源中看到完全动态的布局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 2010-12-11
  • 2013-05-20
相关资源
最近更新 更多