65.9K
CodeProject 正在变化。 阅读更多。
Home

WEBLIGHT 2.00 开源组件库,用于 MVC.NET 3 和 4

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2012年8月8日

CPOL

4分钟阅读

viewsIcon

20478

WEBLIGHT 2.00 开源组件库,用于 MVC.NET 3 和 4

注意:要运行此源代码,您需要安装以下框架/RDBMS

  • SQL Express 2008
  • MVC.NET 3 或更高版本
  • MS VISUAL STUDIO 2010

您唯一需要做的就是按 F5 运行系统。请查看现有的项目、视图和模型。我建议您查看 In WebTest 项目:Areas 中的 Views,特别是 Messenging 区域和 WebLightsModels 中的模型,以及 BL 目录。

这些将展示如何用其他系统所需代码的 10% 来编写产品,更可靠,代码质量更高,最终,是一个真正高质量的应用程序。

我们做了什么

如果您阅读了我的最后两篇文章

www.codeproject.com/Articles/330172/OPEN-MVC-PLUS-ENTITY-FRAMEWORK-XML-DBplusWEBLIGHT

https://codeproject.org.cn/Articles/189276/MVC-PLUS-for-MVC-NET-3-00

这些组件是数据库感知的,因此在大多数情况下您不需要编写代码,您必须专注于您的业务层。 分层分离很重要,因为我的理念是创建一个非常可靠的架构。

在服务器端,我们创建了 MVC Plus,它有自己的 ORM 模型,以及连接到任何其他存储库(如 Entity Framework 或 NHibernate 或 Java 中的 Hiberbate)的简便方法。 在 .NET 中,我们有 MVC,这是我们构建 100% 兼容系统的基础架构。 我们设计了这个系统并努力创建我们自己的扩展,现在新的框架诞生了,您可以使用它。

我们按照以下步骤创建了示例。 首先,我们使用 Embarcadero 的 ER STUDIO 8.0 设计了基于域模型的数据库。

我们的示例有一个简单的场景。 我们创建了 Person,其中每个人可能有一个或多个用户 ID,并且他们可以拥有组织职位。 我们还有一个用于传入消息的邮箱,但我们不想通过 100% 无代码(指硬编码)的方式来实现,尤其是在 DB 层。 因此,我们创建了第一个示例,使用了没有经验的开发人员。 我们教她(几天内)如何使用我们的系统进行编码。 她有一些经验(例如,她知道样式表是什么意思),因为她拥有计算机科学学士学位,并且在我们的建议下,她能够在 8 小时内创建这个示例。 她有 5 个表单,她没有使用我们的 Visual Studio 扩展来创建自动代码,她必须通过她自己手动编码的经验来编写代码。 如果您通过我们的 Visual Studio 扩展来执行相同的场景,则需要更少的时间(2 小时)。

MVC PLUS .NET 和 WEBLights 是一个 100% 标准的 MVC.NET 库,因此您必须安装 MVC.NET 3.00 才能运行示例 + MSSQL Express 2008(版本 10.0.2531 或更高版本)

创建程序的步骤

首先,从项目模板创建一个新的 MVC PLUS 业务项目。

右键单击 BL 文件夹,添加一个域,这将创建以下文件夹以及 BL 目录中的以下结构

  • 模型
  • Service
  • 策略
  • 存储库

右键单击模型并添加您的模型,添加一个模型,选择您的数据库并选择您想在模型中拥有的表和字段。 系统将创建必要的选择命令,并且您可能还有存储过程或 18 个不同命令的文本。 在本文中,将告诉您如何管理您的模型。

例如,对于 MessageBoxes,您可以在文件中使用以下代码。

namespace WEBLightsModels.BL.Messenging.Models
{
    [WLMORecursiveModel(Alias = "MessageBoxID=RecursiveID", StepLoadRecursive = false)]
    [WLMOTableInfo("MessageBox")]
    publil partial class MessageBox : BaseModel<MessageBox>
    {
        [WLFField(DBFieldName = "MessageBox.MessageBoxID"),
         WLFDisplayName("Box ID", Language = WLLanguages.Default)]
        public int? MessageBoxID
        {
            get { return this["MessageBoxID"]; }
            set { this["MessageBoxID"] = value; }
        }
        [WLFField(DBFieldName = "MessageBox.RecursiveID"),
         WLFDisplayName("Box ID", Language = WLLanguages.Default)]
        public int? RecursiveID
        {
            get { return this["RecursiveID"]; }
            set { this["RecursiveID"] = value; }
        }
        [WLFField(DBFieldName = "MessageBox.Caption"),
         WLFDisplayName("Caption", Language = WLLanguages.Default)]
        public string Caption
        {
            get { return this["Caption"]; }
            set { this["Caption"] = value; }
        }
        [WLFField(DBFieldName = "MessageBox.Name"),
         WLFDisplayName("Name", Language = WLLanguages.Default)]
        public string Name
        {
            get { return this["Name"]; }
            set { this["Name"] = value; }
        }
        [WLFField(DBFieldName = "MessageBox.IsDefault"),
         WLFDisplayName("Name", Language = WLLanguages.Default)]
        public bool? isDefault
        {
            get { return this["IsDefault"]; }
            set { this["IsDefault"] = value; }
        }
        public MessageBox(WLBaseMetaModel metamodel, string name, string profile)
            : base(metamodel, name, profile)
        {
        }
        public MessageBox(WLModel<MessageBox> baseModel)
            : base(baseModel)
        {
 
        }
    }
}

与此同时,这将生成一个 XML 文件,其中包含 ModelXMLData 文件夹中模型的 XML 信息。

下一步是什么?

在您打开的 MVC PLUS 模板项目中,添加一个 Area。 现在添加一个控制器,然后在 *Models* 目录中添加 MVC Plus MetaModel。 现在添加您的已分配模型并建立它们的关系。 例如,主/从,并将所需的选项添加到它们。

一个示例 MetaModel。

namespace MVCWebTest.Areas.Messenging.Models
{
    [WLMMDisplay("Messages", Hint = "Messages")]
    [WLMMWindow(Width = "800", Height = "600")]
    public class MessageViewIndex : WL.Web.Model.WLMetaModel<MessageViewIndex>
    {
        [WLMOAutoCreate]
        public WEBLightsModels.BL.Messenging.Models.MessageBody MessageBody { get; set; }
        [WLMOAutoCreate]
        [WLMOConnectModels("MessageID=MessageID", "MessageBody")]
        public WEBLightsModels.BL.Messenging.Models.Messages Messages { get; set; }
 
        [WLMOAutoCreate]
        [WLMOConnectModels("MessageBoxID=MessageBoxID", "Messages")]
        public WEBLightsModels.BL.Messenging.Models.MessageBox MessageBox { get; set; }
    }
}

下一步:向您的视图中添加一个 MVC PLUS VIEW。 编写您的客户端代码。

视图 Razor 代码

using WL.Web.UI
@using WL.Base.Types
@using WL.Web.UI.Components
@using WL.Web.UI.Components.Tree
@model MVCWebTest.Areas.Messenging.Models.MessageViewIndex
@{
    Layout = "~/Views/Shared/_InternalLayout.cshtml";
}
@using (@Html.View(Model))
{
}
@using (Html.WLPanel("BoxesPanel", "Boxes Panel", dockAlign: WLDockAlign.Left, htmlAttributes: new { style = "width:200px" }))
{
    @Html.WLNavigatorFor(m => m.MessageBox, "Navigator", dockAlign: WLDockAlign.Top)
    using (var dc = Html.WLTreeFor(m => m.MessageBox, "MessageBoxTree", captionField: "Caption", showLines: true, htmlAttributes: new { style = "height:90px" }, dockAlign: WLDockAlign.Client, treeType: WLTreeType.Tree))
    {
    }
    using (Html.WLPanel("BoxesEditPanel", "Boxes Edit Panel", dockAlign: WLDockAlign.Bottom, htmlAttributes: new { style = "height:150px" }))
    {
    @Html.WLTextEditFor(m => m.MessageBox.Caption, showCaption: WLPosition.Top)
    @Html.WLTextEditFor(m => m.MessageBox.Name, showCaption: WLPosition.Top)
    }
}
@using (Html.WLPanel("MessageView", "MessageVoew", dockAlign: WLDockAlign.Client))
{
    using (Html.WLGridFor(m => m.Messages, "PersonGrid", dockAlign: WLDockAlign.Client, activeView: "DEFAULT", htmlAttributes: new { style = "height:400px" }).SetPageSize(6).SetUsePaging(true))
    {
 
    }
    using (Html.WLPanel("MessageView", "MessageVoew", dockAlign: WLDockAlign.Bottom, htmlAttributes: new { style = "height:400px" }))
    {
        using (Html.WLPanel("MessageViewTop", "MessageVoew", dockAlign: WLDockAlign.Top, htmlAttributes: new {style = "height:50px;background-color:silver"}))
        {
 
        }
        using (Html.WLPanel("MessageHtmlView", ""))
        {
            @Html.WLDivViewFor(m => m.MessageBody.Message)
        }
    }
}

下载示例,并在下面的评论中让我知道您对这项技术有任何意见。

这是示例中的欢迎页面,右侧是未固定的面板,其他面板已固定。

Persons 编辑页面在选项卡中打开,内部有一个复杂的布局模型和一个主从场景。

Persons 编辑页面在内部窗口中打开,您可以最大化此内部窗口,使其休眠(Web 休眠技术)或最小化它。

用户窗口在选项卡中打开。

组织结构编辑器在内部选项卡中打开

消息在选项卡中打开。

© . All rights reserved.