• 创新人才推进计划实施方案 2019-11-15
  • 礁石旅行地中国国家地理网 2019-11-09
  • 回复@海之宁:你的智商真滴不行!一边玩切…… 2019-11-04
  • 高清:高尔夫英国公开赛即将开赛 麦克罗伊召开赛前发布会 2019-11-04
  • 不仅是肌肉、技术比拼,更是精神PK,所以是文明人的战争。 2019-11-01
  • 次贷危机十年 防范金融危机还需做什么? 2019-10-27
  • 六问手机流量那些事:我的流量去哪儿了? 2019-10-26
  • 谁在倒卖用户个人信息?内鬼或是泄露主要渠道 2019-10-26
  • 第13期全人代第1回会議政協第13期全国委員会第1回会議 2019-10-23
  • 【理上网来·喜迎十九大】这五年,全面从严治党交出靓丽“赶考”答卷 2019-10-23
  • 抚州市12名处级干部正式任职 2019-10-17
  • 数读舆情:2017年中国人阅读了多少文字? 2019-10-17
  • [大笑]肯定要付钱啊!你个人占有属于大家的资源,就是一根针都得付钱,更何况是不可再生的土地? 2019-10-14
  • 【理上网来·喜迎十九大】人民军队的制胜之本力量之源 2019-10-07
  • [大笑]当然要付钱,你占用属于大家的资源,那怕是一根针都要付钱! 2019-10-05
  • 金葵设计—云南网站建设\网络推广\网络营销\品牌传输\软件开发知名设计!
    您当前的位置:云南11选5前三和值走势图 > 设计前沿 > 开发技术

    Orchard中如何实现简单的??樯?/h2>

    云南11选5前三和值走势图 www.tri99.com 文章概述:

    Orchard中如何实现简单的??樯?《在Orchard中创建一个HelloWorld??椤芬晃闹形颐墙樯芰巳绾未唇ㄒ桓龇浅<虻サ腍elloWorld???。当时HelloWorld??橹皇窍允玖艘欢卧贑ode中指定的文字。本文将对HelloWorld??榻猩?,让所显示的文字可以在后台维护。为了实现这个功…

    文章内容涵盖:

     

    Orchard中如何实现简单的??樯?

     

    在Orchard中创建一个HelloWorld???/a>》一文中我们介绍了如何创建一个非常简单的HelloWorld???。当时HelloWorld??橹皇窍允玖艘欢卧贑ode中指定的文字。本文将对HelloWorld??榻猩?,让所显示的文字可以在后台维护。为了实现这个功能,我们需要进行以下工作:

    1、建立一个数据表,存储这段文字。

    2、在Orchard后台中建立一个维护界面,实现编辑显示文字的功能。

    3、修改前台代码,将直接在Code中写死的文字改为从数据库中读取。

     


    创建数据库安装文件

    在Orchard中提供了一套??榈陌沧昂蜕痘?。当??樾枰玫绞菘獾氖焙?,Orchard通过一个Migrations.cs文件去创建和更新数据库。在Orchard命令行工具中输入以下命令,即可创建Migrations.cs文件模板。
    Codegen datamigration MyCompany.HelloWorld
    修改代码如下:

     

    using System;
    using System.Collections.Generic;
    using System.Data;
    using Orchard.ContentManagement.Drivers;
    using Orchard.ContentManagement.MetaData;
    using Orchard.ContentManagement.MetaData.Builders;
    using Orchard.Core.Contents.Extensions;
    using Orchard.Data.Migration;

    namespace MyCompany.HelloWorld 
    {
        
    /// <summary>
        
    /// 数据库创建升级文件
        
    /// </summary>
        public class Migrations : DataMigrationImpl
        {
            
    /// <summary>
            
    /// 由于先的一个版本没有数据库所以这个地方空着
            
    /// </summary>
            
    /// <returns>返回版本号</returns>
            public int Create()
            {
                
    return 1;
            }

            
    /// <summary>
            
    /// 升级???,创建一个数据表存储HelloWorld??樗枰允镜奈淖?br />         /// </summary>
            
    /// <returns>返回版本号</returns>
            public int UpdateFrom1()
            {
                
    // 创建存储HelloWorld文字的数据库
                SchemaBuilder.CreateTable("TextRecord", table => table
                    .Column
    <int>("Id", column => column.PrimaryKey().Identity())    //定义一个Id键
                    .Column<string>("Content", column => column.WithLength(200))    //定义一个内容字段,长度200
                );

                
    return 2;
            }
        }
    复制代码

     

    这样我们再次登陆管理后台的时候会有升级??榈奶崾?

     

    点击Update即可升级???,在数据库中就可以看见我们刚刚创建的表了。

     

    如果我们以后还需升级这个HelloWorld???,只用在Migrations.cs文件中添加一个UpdateFrom2方法返回3即可,后续还有升级就以此类推。 

     

    创建数据实体及业务逻辑层代码

    在Orchard中数据实体的命名规则通常是:实体名+Record构成。遵循此规则我们在??槟柯枷碌腗odels目录中添加一个TextRecord.cs文件,代码如下:

     

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Orchard.ContentManagement.Records;
    using Orchard.ContentManagement;
    using System.ComponentModel.DataAnnotations;

    namespace MyCompany.HelloWorld.Models
    {
        
    public class TextRecord
        {
            
    public virtual int Id { getset; }
            
    public virtual string Content { getset; }
        }
    复制代码

     

    在Orchard中是通过Nhibernate进行数据库操作的,但是我们在进行??榭⒌氖焙虿⒉恍枰苯邮褂肗hibernate,Orchard对其进行了封装。我们只需要通过IRepository<T>接口就可以对相应实体T所对应的数据表进行增、删、改、查的操作了。另外Orchard中的对象实例化,大多都是通过依赖注入去完成的。所以我们需要创建业务逻辑层对象的时候需要首先定义其接口。这样我们在使用该业务对象的时候就直接使用接口即可,Orchard会自动找到相应的类并实例化。
    首先在??槟柯贾写唇ㄒ桓鯯ervices目录来存放业务逻辑层代码,然后添加一个ITextService.cs文件,输入以下代码来定义一个接口:


    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Orchard;
    using MyCompany.HelloWorld.Models;

    namespace MyCompany.HelloWorld.Services
    {
        
    /// <summary>
        
    /// 定义业务层接口(为了实现依赖注入还需继承IDependency接口)
        
    /// </summary>
        public interface ITextService : IDependency
        {
            
    /// <summary>
            
    /// 这里不考虑多条数据的情况,仅默认获取第一条数据
            
    /// </summary>
            
    /// <returns></returns>
            TextRecord GetText();

            
    /// <summary>
            
    /// 更新数据
            
    /// </summary>
            
    /// <param name="content"></param>
            
    /// <returns></returns>
            TextRecord UpdateText(string content);
        }

    复制代码

     

    再在Services目录中添加一个TextService.cs文件,输入以下代码来实现此接口:


    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using JetBrains.Annotations;
    using Orchard.Data;
    using MyCompany.HelloWorld.Models;

    namespace MyCompany.HelloWorld.Services
    {
        [UsedImplicitly]
        
    public class TextService : ITextService
        {
            
    /// <summary>
            
    /// IRepository可以把它理解为数据访问层对象,它提供了相应实体的增删改查操作。
            
    /// </summary>
            private readonly IRepository<TextRecord> _textRepository;

            
    public TextService(IRepository<TextRecord> textRepository)
            {
                _textRepository 
    = textRepository;
            }

            
    #region ITextService 成员

            
    public TextRecord GetText()
            {
                
    return _textRepository.Table.FirstOrDefault();
            }

            
    public TextRecord UpdateText(string content)
            {
                var result 
    = GetText();
                
    if (result == null)
                {
                    result 
    = new TextRecord { Content = content };
                    _textRepository.Create(result);
                }
                
    else
                {
                    result.Content 
    = content;
                    _textRepository.Update(result);
                }
                
    return result;
            }

            
    #endregion
        }
    复制代码

     

     

    创建管理后台界面

    在Orchard中如果需要在后台添加一个维护界面,需要通过添加一个AdminMenu.cs文件来实现。这个文件可以定义相应??樗涤械牟说ズ投杂Φ穆酚?。AdminMenu.cs的代码如下:

     

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Orchard.UI.Navigation;
    using Orchard.Security;
    using Orchard.Localization;

    namespace MyCompany.HelloWorld
    {
        
    public class AdminMenu : INavigationProvider
        {
            
    public Localizer T { getset; }

            
    #region INavigationProvider 成员

            
    /// <summary>
            
    /// 指定这个菜单是一个管理菜单
            
    /// </summary>
            public string MenuName
            {
                
    get { return "admin"; }
            }

            
    public void GetNavigation(NavigationBuilder builder)
            {
                builder.AddImageSet(
    "helloworld")       //设置菜单图标(Orchard中默认约定调用Styles目录下的menu.xxxxxx-admin.css样式文件来显示菜单前面的图标)
                    .Add(
                        T(
    "Hello World"),               //菜单文本
                        "5",                            //菜单位置(Orchard会根据这个值对菜单进行排序)
                        menu => menu.Action("Index""Admin"new { area = "MyCompany.HelloWorld" })    //定义菜单所执行的路由
                     );
            }

            
    #endregion
        }
    复制代码

     

    此外我们还需要添加这个维护界面所对应的Controller、View以及View对应的ViewModel。这些都是一些MVC的基本知识,在上一篇的HelloWord??橹幸延薪樯?,在此就不重复贴代码了。大家可以下载本文示例代码查看。另外修改前台Controller代码也不赘述。
     

    使用升级后的HelloWorld???

    首先,进入管理后台,我们就可以看见“Hello World”的管理菜单,点击即可进入HelloWorld界面。
    保存文字,还是在前台访问 /HelloWorld 地址,即可看见效果。

     

    结论

    通过本文示例,我们又学习了Orchard中的一些知识。包括:如何安装和升级??樗褂玫氖菘?、如何在后台添加一个管理界面、如何存取数据等。但是本文所介绍的这些知识,都只是触及了一下皮毛,后续可就这几个知识点再次展开深入的学习,此文权当抛砖引玉之用。


    原创文章请注明转载自云南11选5前三和值走势图-云南11选5前三和值走势图, 本文地址:关键字:

    云南11选五前三直遗漏:您可以直接点击下方按钮开始咨询,我们很高兴为您服务。
    (无QQ用户也可以直接对话)

    您好,请问需要设计服务吗!
    如有需要请联系

    我们的联系方式:

    给我们留言:

    • 您贵姓:
    • 您手机*:
    • 设计内容:
    • 验证码:
  • 创新人才推进计划实施方案 2019-11-15
  • 礁石旅行地中国国家地理网 2019-11-09
  • 回复@海之宁:你的智商真滴不行!一边玩切…… 2019-11-04
  • 高清:高尔夫英国公开赛即将开赛 麦克罗伊召开赛前发布会 2019-11-04
  • 不仅是肌肉、技术比拼,更是精神PK,所以是文明人的战争。 2019-11-01
  • 次贷危机十年 防范金融危机还需做什么? 2019-10-27
  • 六问手机流量那些事:我的流量去哪儿了? 2019-10-26
  • 谁在倒卖用户个人信息?内鬼或是泄露主要渠道 2019-10-26
  • 第13期全人代第1回会議政協第13期全国委員会第1回会議 2019-10-23
  • 【理上网来·喜迎十九大】这五年,全面从严治党交出靓丽“赶考”答卷 2019-10-23
  • 抚州市12名处级干部正式任职 2019-10-17
  • 数读舆情:2017年中国人阅读了多少文字? 2019-10-17
  • [大笑]肯定要付钱啊!你个人占有属于大家的资源,就是一根针都得付钱,更何况是不可再生的土地? 2019-10-14
  • 【理上网来·喜迎十九大】人民军队的制胜之本力量之源 2019-10-07
  • [大笑]当然要付钱,你占用属于大家的资源,那怕是一根针都要付钱! 2019-10-05
  • 十三水最大的牌图片 乒乓球世锦赛2019马龙 360彩票网官网可靠吗 重庆时时彩停止开奖 下载贵州快三开奖结果直播 英超直播免费观看网站 胜平负预测 福建十一选五讨论群 七乐彩84期中奖号码 新疆时时彩二星走势图 吉林快3预测推荐号码 荣富国际娱乐登录 赛车7码倍投表 百盈快3计算公式绝准法 吉林十一选五快速开奖现场