• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ABP框架中导航菜单的使用及JavaScript API获取菜单的方法

    每一个WEB应用程序都有导航菜单,Abp也为用户提供了通用的创建和显示菜单方式。

    创建菜单
    一个应用程序可能包含不同的模块,而每个模块都可能有它自己的菜单项。在Abp中,需要创建一个派生自NavigationProvider的类来定义一个菜单项。
    假设我们有一个这样的主菜单:

    由上可知,Administration菜单项有两个子菜单项。对应的生成方法如下:

     public class SimpleTaskSystemNavigationProvider : NavigationProvider
    {
      public override void SetNavigation(INavigationProviderContext context)
      {
        context.Manager.MainMenu
          .AddItem(
            new MenuItemDefinition(
              "Tasks",
              new LocalizableString("Tasks", "SimpleTaskSystem"),
              url: "/Tasks",
              icon: "fa fa-tasks"
              )
          ).AddItem(
            new MenuItemDefinition(
              "Reports",
              new LocalizableString("Reports", "SimpleTaskSystem"),
              url: "/Reports",
              icon: "fa fa-bar-chart"
              )
          ).AddItem(
            new MenuItemDefinition(
              "Administration",
              new LocalizableString("Administration", "SimpleTaskSystem"),
              icon: "fa fa-cogs"
              ).AddItem(
                new MenuItemDefinition(
                  "UserManagement",
                  new LocalizableString("UserManagement", "SimpleTaskSystem"),
                  url: "/Administration/Users",
                  icon: "fa fa-users",
                  requiredPermissionName: "SimpleTaskSystem.Permissions.UserManagement"
                  )
              ).AddItem(
                new MenuItemDefinition(
                  "RoleManagement",
                  new LocalizableString("RoleManagement", "SimpleTaskSystem"),
                  url: "/Administration/Roles",
                  icon: "fa fa-star",
                  requiredPermissionName: "SimpleTaskSystem.Permissions.RoleManagement"
                  )
              )
          );
      }
    }
    

     
    MenuItemDefinition可以有一个唯一的名字,一个用于本地化显示的名字,一个url和一个icon,此外,菜单项可能需要与特定用户权限相结合(相关权限系统正在开发,暂时还没有说明文档)。
    InavigationProviderContext方法能够获取现有的菜单项、添加菜单或菜单项。因此,不同的模块可以添加各自的菜单。
    创建完成导航后,还需要在对应模块预初始化时注册到Abp配置文件中:
    Configuration.Navigation.Providers.AddSimpleTaskSystemNavigationProvider>();

    显示菜单
    IuserNavigationManager可以注入、获取和显示菜单。可以在服务器端创建菜单。
    Abp自动生成的javascript API使得用户能够在客户端获取菜单,对应的方法和对象在命名空间abp.nav中。例如,在客户端使用abp.nav.menus.MainMenu可以用来获取主菜单。
    下面我们就来看一下JavaScript的相关方面。

    Ajax
    现代的应用经常会使用AJAX,尤其是单页应用,几乎是和服务器通信的唯一手段,执行AJAX通常会有以下步骤:
    在客户端,你需要提供一个URL,选择一个和服务器通信的方法(GET,POST,PUT,DELETE)。在请求完成后执行回调函数,请求结果可更是成功或失败,失败时你需要给出提示,成功时你需要根据返回值执行操作。通常情况下,在请求开始时,你需要给出类似正在处理或者相关的繁忙等待信息(如页面遮盖),请求完成后恢复。
    服务端接收到请求后,对请求参数进行验证,执行服务端代码,如果发生错误或者验证失败,应给出具体的原因,成功时返回客户端想要的数据。
    ABP服务端支持标准的ajax的请求/输出。建议大家使用abp.jquery.js中提供的ajax请求方法,这个方法基于jquery的ajax方法,可以自动处理服务端的异常信息,当然,如果你对js很熟练的话,也可以根据自己的需要写ajax。
    ASP.NET Boilerplate的ajax请求实例:
     

    //构建要传输的参数对象
    var newPerson = {
      name: 'Dougles Adams',
      age: 42
    };
    //调用abp的ajax方法
    abp.ajax({
      url: '/People/SavePerson',
      data: JSON.stringify(newPerson) //转换成json字符串
    }).done(function(data) {
    abp.notify.success('created new person with id = ' + data.personId);
    });
    

     
    你也可以使用jquery的ajax方法调用,但是需要设置一下默认请求参数,dataType 设置为 'json', type 设置为 'POST' and contentType 设置为 'application/json,在发送请求时需要将js对象转换成json字符串,和$.ajax一样,你也可以传递参数覆盖abp.ajax的默认参数abp.ajax返回一个promise类型,你可以链式编程写如下的方法:

    .done() //成功,
    .fail() //失败,
    .then() //回调嵌套。
    

    下面的一个简单的例子展示ajax请求PeopleController的SavePerson方法,在.done()中可以获取到服务端创建记录成功后返回的记录id。

    public class PeopleController : AbpController
    {
      [HttpPost]
      public JsonResult SavePerson(SavePersonModel person)
      {
        //TODO: save new person to database and return new person's id
    //TODO: 创建一个新的person记录并返回此记录的id
        return Json(new {PersonId = 42});
      }
    }
    

     
    SavePersonModel 包含name,age等属性. SavePerson 上标记了 HttpPost 特性 abp.ajax默认以 POST 方式请求. 返回值被简化成了一个匿名对象。

    SavePersonModel 包含name,age等属性. SavePerson 上标记了 HttpPost 特性 abp.ajax默认以 POST 方式请求. 返回值被简化成了一个匿名对象。

    AJAX 返回值(AJAX return messages)

    我们直接返回了一个匿名对象, ABP 通过 MvcAjaxResponse 类型包装了返回值. 实际的返回值类型如下:

    {
     "success": true, //正确处理标志
     "result": {
      "personId": 42 //返回的数据
     },
     "error": null, //如果发生错误,result为null,此处为错误信息的对象,包含message和details两个属性
     "targetUrl": null, //可以提供一个url供客户端重定向,例如自动构建下一页的url
     "unAuthorizedRequest": false //是否通过了授权,如果返回true,客户端应重新登录
    }
    

     
    如果你继承了AbpController,Json方法返回的对象总会被这样包装,如果未发生错误,你在abp.ajax的done(function(result,data){})中,第一个参数result是{"personId": 42}对象,data是原始对象,WebApi中继承AbpApiController也是同样的机制。

    错误处理(Handling errors)

    返回值如下:
     

    {
     "targetUrl": null,
     "result": null,
     "success": false, //代表出现异常
     "error": {
      "message": "An internal error occured during your request!", //未捕捉到的异常,通常为系统异常,会自动记录日志,具体提示信息在配置文件配置,可以搜索一下,如果是业务抛出的UserFriendlyException异常,message为具体的错误信息
      "details": "..." //发生异常时默认会调用abp.message.error函数,你可以在abp.jquery.js修改,统一处理错误信息。
     },
     "unAuthorizedRequest": false
    }
    

     
    动态WebAPI(Dynamic Web API Layer)

    此处会根据Services动态生成WebAPI调用函数:

     

    //通常我们使用ajax会按照如下写法,做一个简单的封装来重用ajax,此处框架可以帮你生成简单的调用方法
    var savePerson = function(person) {
      return abp.ajax({
        url: '/People/SavePerson',
        data: JSON.stringify(person)
      });
    };
    //调用时你需要构建参数
    var newPerson = {
      name: 'Dougles Adams',
      age: 42
    };
    //直接调用方法,如何生成上面的调用方法可以参考源码中的Abp.Web.Api项目中/ WebApi/ Controllers/ Scripting/ jQuery下的实现
    savePerson(newPerson).done(function(data) {
      abp.notify.success('created new person with id = ' + data.personId);
    });
    

     

    您可能感兴趣的文章:
    • JS无限级导航菜单实现方法
    • AngularJS+Bootstrap3多级导航菜单的实现代码
    • 基于JavaScript实现熔岩灯效果导航菜单
    • js+div+css下拉导航菜单完整代码分享
    • JS中用三种方式实现导航菜单中的二级下拉菜单
    • JS 实现导航菜单中的二级下拉菜单的几种方式
    • JavaScript实战之带收放动画效果的导航菜单
    • 原生js和jquery分别实现横向导航菜单效果
    • javascript HTML+CSS实现经典橙色导航菜单
    • 以JavaScript来实现WordPress中的二级导航菜单的方法
    • JS+CSS实现另类带提示效果的竖向导航菜单
    • JS+CSS实现简单的二级下拉导航菜单效果
    • JS实现移动端可折叠导航菜单(现代都市风)
    上一篇:asp.net(C#)使用QRCode生成图片中心加Logo或图像的二维码实例
    下一篇:使用PowerShell .Net获取电脑中的UUID
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    ABP框架中导航菜单的使用及JavaScript API获取菜单的方法 ABP,框架,中,导航,菜单,的,