• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ABP框架中导航菜单的使用及JavaScript API获取菜单的方法

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

作者:阳光铭睿 字体:[增加 减小] 来源:互联网 时间:2017-05-11

阳光铭睿通过本文主要向大家介绍了abp框架,abp框架源码,abp框架是什么,abp 263,abp 486等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

  • Tasks
  • Reports
  • Administration 1 User Management 2 Role Management

由上可知,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"
              )
          )
      );
  }
}
</div>

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

显示菜单
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);
});
</div>

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

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

下面的一个简单的例子展示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});
  }
}
</div>

 
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,客户端应重新登录
}
</div>

 
如果你继承了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
}
</div>

 
动态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);
});
</div>

 

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ABP框架中导航菜单的使用及JavaScript API获取菜单的方法
  • 解析ABP框架中的数据传输对象与应用服务
  • ABP框架中的日志功能完全解析
  • 详解ABP框架的参数有效性验证和权限验证
  • 解析ABP框架中的事务处理和工作单元
  • 详解ABP框架中的数据过滤器与数据传输对象的使用
  • 解析ABP框架领域层中的实体类与仓储类
  • 详解ABP框架中Session功能的使用方法
  • ABP框架的基础配置及依赖注入讲解
  • ABP框架的体系结构及模块系统讲解

相关文章

  • 2017-05-11Asp.net实现选择性的保留DataTable中的列
  • 2017-05-11asp.net下获取远程网页的内容之二(downmoon原创)
  • 2018-08-20Visual Studio 2017如何用正则修改部分内容详解
  • 2017-05-11使用Asp.net Mvc3 Razor视图方式扩展JQuery UI Widgets方法介绍
  • 2017-05-11VB.NET进度条的方法代码
  • 2017-05-11ASP.NET Datagridview自动换行的小例子
  • 2017-05-11asp.net repeater手写分页实例代码
  • 2018-08-20ASP.NET Core简单介绍教程(1)
  • 2017-05-11ASP.NET五步打包下载Zip文件实例
  • 2017-05-11Visual Studio 2017 ASP.NET Core开发

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net mvc 动态编译生成Controller的方法
    • asp.net 1.1/ 2.0 中快速实现单点登陆
    • 上传图片前判断文件格式与大小验证文件是不是图片
    • 基于.NET中:自动将请求参数绑定到ASPX、ASHX和MVC的方法(菜鸟必看)
    • ASP.NET 前后台调用方法
    • Visual Studio 2017正式版离线安装教程
    • 白刃之战:PHP vs. ASP.NET(节选)-架构比较
    • asp.net 图片的读写入库实现代码
    • ASP .NET中执行控件(如ImageButton、LinkButton等)命令不刷新页面
    • 创建一个完整的ASP.NET Web API项目

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有