ABP框架+Mysql(二)

展示页面--图书列表页面

本地化

开始的UI开发之前,我们首先要准备本地化的文本(这是你通常在开发应用程序时需要做的).本地化文本在前端页面会常用。

本地化文本位于 Acme.BookStore.Domain.Shared 项目的 Localization/BookStore 文件夹下:

打开 en.json (英文翻译)文件并更改内容,如下所示:

{"Culture": "en","Texts": {"Menu:Home": "Home","Welcome": "Welcome","LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.","Menu:BookStore": "Book Store","Menu:Books": "Books","Actions": "Actions","Close": "Close","Delete": "Delete","Edit": "Edit","PublishDate": "Publish date","NewBook": "New book","Name": "Name","Type": "Type","Price": "Price","CreationTime": "Creation time","AreYouSure": "Are you sure?","AreYouSureToDelete": "Are you sure you want to delete this item?","Enum:BookType.Undefined": "Undefined","Enum:BookType.Adventure": "Adventure","Enum:BookType.Biography": "Biography","Enum:BookType.Dystopia": "Dystopia","Enum:BookType.Fantastic": "Fantastic","Enum:BookType.Horror": "Horror","Enum:BookType.Science": "Science","Enum:BookType.ScienceFiction": "Science fiction","Enum:BookType.Poetry": "Poetry"}
}

简体中文翻译请打开zh-Hans.json文件 ,并将"Texts"对象中对应的值替换为中文.

  • 本地化关键字名称是任意的. 你可以设置任何名称. 对于特定的文本类型,我们更喜欢遵循一些约定:
    • 为按钮项添加 Menu: 前缀.
    • 使用 Enum:<enum-type>:<enum-name> 或 <enum-type>.<enum-name> 或 <enum-name> 命名约定来本地化枚举成员. 当您这样做时ABP可以在某些适当的情况下自动将枚举本地化.

如果未在本地化文件中定义文本,则文本将回退到本地化键(ASP.NET Core的标准行为).

创建图书页面

是时候创建可见的和可用的东西了! 我们将使用微软推荐的Razor Pages UI,而不是经典的MVC.

在 Acme.BookStore.Web 项目的 Pages 文件夹下创建一个名为新的 Books 的文件夹. 然后在文件夹右键选择 添加 > Razor Page 菜单. 输入名称 Index:

打开 Index.cshtml 并把内容修改成下面这样:

@page
@using Acme.BookStore.Web.Pages.Books
@model IndexModel<h2>Books</h2>

@page

这行代码声明这是一个Razor Page。Razor Pages 是一种ASP.NET Core的功能,用于简化基于页面的Web应用程序的开发。@page指令使得这个文件成为一个处理HTTP请求的页面。

@using Acme.BookStore.Web.Pages.Books

这行代码引入了 Acme.BookStore.Web.Pages.Books 命名空间。使用 @using 指令可以导入命名空间,使得在页面中可以直接使用该命名空间下的类和方法。

@model IndexModel

这行代码指定了这个页面使用的模型类是 IndexModelIndexModel 是一个后台代码类,通常位于 Index.cshtml.cs 文件中,包含了处理页面数据和操作的逻辑。在Razor Page中,模型类通常派生自 PageModel 类。

Index.cshtml.cs 内容应该是:

using Microsoft.AspNetCore.Mvc.RazorPages;namespace Acme.BookStore.Web.Pages.Books
{public class IndexModel : PageModel{public void OnGet(){}}
}

将图书页面添加到主菜单

打开 Menus 文件夹中的 BookStoreMenuContributor 类,在 ConfigureMainMenuAsync 方法的底部添加如下代码:

context.Menu.AddItem(new ApplicationMenuItem("BooksStore",l["Menu:BookStore"],icon: "fa fa-book").AddItem(new ApplicationMenuItem("BooksStore.Books",l["Menu:Books"],url: "/Books"))
);

运行项目,使用用户名 admin 和密码 1q2w3E* 登录到应用程序. 看到新菜单项已添加到菜单栏:

图书列表

Index.cshtml

将 Pages/Book/Index.cshtml 改成下面的样子:

@page
@using Acme.BookStore.Localization
@using Acme.BookStore.Web.Pages.Books
@using Microsoft.Extensions.Localization
@model IndexModel
@inject IStringLocalizer<BookStoreResource> L
@section scripts
{<abp-script src="/Pages/Books/Index.js" />
}
<abp-card><abp-card-header><h2>@L["Books"]</h2></abp-card-header><abp-card-body><abp-table striped-rows="true" id="BooksTable"></abp-table></abp-card-body>
</abp-card>
  • abp-script tag helper用于将外部的 脚本 添加到页面中.它比标准的script标签多了很多额外的功能.它可以处理 最小化和 版本.查看捆绑 & 压缩文档获取更多信息.
  • abp-card 和 abp-table 是为Twitter Bootstrap的card component封装的 tag helpers.ABP中有很多tag helpers,可以很方便的使用大多数bootstrap组件.你也可以使用原生的HTML标签代替tag helpers.使用tag helper可以通过智能提示和编译时类型检查减少HTML代码并防止错误.查看tag helpers 文档.
Index.js

在 Pages/Books/ 文件夹中创建 index.js文件

js的内容:

$(function () {var l = abp.localization.getResource('BookStore');var dataTable = $('#BooksTable').DataTable(abp.libs.datatables.normalizeConfiguration({serverSide: true,paging: true,order: [[1, "asc"]],searching: false,scrollX: true,ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList),columnDefs: [{title: l('Name'),data: "name"},{title: l('Type'),data: "type",render: function (data) {return l('Enum:BookType:' + data);}},{title: l('PublishDate'),data: "publishDate",render: function (data) {return luxon.DateTime.fromISO(data, {locale: abp.localization.currentCulture.name}).toLocaleString();}},{title: l('Price'),data: "price"},{title: l('CreationTime'), data: "creationTime",render: function (data) {return luxon.DateTime.fromISO(data, {locale: abp.localization.currentCulture.name}).toLocaleString(luxon.DateTime.DATETIME_SHORT);}}]}));
});
  • abp.localization.getResource 获取一个函数,该函数用于使用服务器端定义的相同JSON文件对文本进行本地化. 通过这种方式你可以与客户端共享本地化值.
  • abp.libs.datatables.normalizeConfiguration是一个辅助方法.不是必须的, 但是它通过为缺省的选项提供约定的值来简化Datatables配置.
  • abp.libs.datatables.createAjax是另一个辅助方法,用来适配ABP的动态JavaScript API代理和Datatable期望的参数格式.
  • acme.bookStore.books.book.getList 是动态JavaScript代理函数(上面已经介绍过了)
  • luxon 库也是该解决方案中预先配置的标准库,你可以轻松地执行日期/时间操作.

 最终的效果图

出现的问题

菜单项无法点击

菜单项无法点击,然后 看网页的控制台,各种找不到,这是我们缺少一个lib包

Could not find the bundle file '/libs/abp/luxon/abp.luxon.js' for the bundle 'LeptonXLite.Global'!
VM52:1 Could not find the bundle file '/libs/timeago/jquery.timeago.js' for the bundle 'LeptonXLite.Global'!

可以直接去我得资源中去找。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介 什么是 NVIC &#xff1f; NVIC 即嵌套向量中断控制器&#xff0c;全称 Nested vectored interrupt controller 。它 是内核的器件&#xff0c;所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断&#xff0c;其中包含了 16 个系统中…

MySQL—函数—数值函数(基础)

一、引言 首先了解一下常见的数值函数哪些&#xff1f;并且直到它们的作用&#xff0c;并且演示这些函数的使用。 二、数值函数 常见的数值函数如下&#xff1a; 注意&#xff1a; 1、ceil(x)、floor(x) &#xff1a;向上、向下取整。 2、mod(x,y)&#xff1a;模运算&#x…

Kmeans聚类模型

K均值(K-Means)聚类是一种常用的无监督学习算法,用于将数据集中的样本划分为K个不同的簇(cluster),使得每个样本都属于距离最近的簇的中心。K均值聚类的目标是通过最小化簇内样本的方差或欧氏距离的平方和来确定簇的中心,从而实现聚类分析。 一、Kmeans聚类模型原理 随…

CTF本地靶场搭建——GZ:CTF基础使用

GZ::CTF 是一个基于 ASP.NET Core 的开源 CTF 平台。 简介 GZ::CTF 是一个基于 ASP.NET Core 的开源 CTF 平台&#xff0c;采用 Docker 或 K8s 作为容器部署后端&#xff0c;提供了可自定义的题目类型、动态容器和动态分值功能。 本项目缘起于作者认为 CTFd 的实现不优雅&a…

Photoshop 首选项设置建议

Windows Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K macOS Ps菜单&#xff1a;Photoshop/首选项 Photoshop/Preferences 快捷键&#xff1a;Cmd K 对 Photoshop 的首选项 Preferences进行设置&#xff0c;可以提高修图与设计效率。下面是一些…

burp插件new_xp_capcha识别验证码的简易安装

1.new_xp_capcha 插件是大佬开发的可以正常白嫖&#xff0c;感谢大佬&#xff0c;我找了个不需要任何高级操作就可以做的安装手法&#xff0c;因为我在网上搜了一下就发现这个的安装过程攻略都还蛮复杂&#xff0c;我这里用了个简单的手法 2.安装 下载地址&#xff1a;smxia…

用Python获取Windows本机安装的所有应用程序的实现与分析

一个项目中需要获取本机安装的所有应用程序列表&#xff0c;花了一点时间研究了一下&#xff0c;分享出来。 主要通过访问注册表和桌面快捷方式来完成这一任务&#xff0c;因为注册表中获取到的应用程序列表不完全&#xff0c;因此通过桌面快捷方式进行补充。 导入所需模块 im…

上网是不是必须路由器和光猫之一负责拨号?

链接&#xff1a;https://www.zhihu.com/question/624856022/answer/3245182557 上网并非一定要“拨号”&#xff0c;使用固定IP地址可以直接上网&#xff0c;不需要拨号。你们公司的宽带属于商用宽带&#xff0c;运营商&#xff08;电信&#xff09;给配置了固定的IP&#…

Python面试宝典:Python中与单元测试相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第二十章:测试和调试:第一节:单元测试】 第二十章:测试和调试第一节:单元测试单元测试的关键概念:Python中的单元测试工具:使用unittest模块编写单元测试的基本步骤:示例代码面试…

不同程序猿的六一表情

初级 中级高级资深#猿脑2.0

小程序模板开发与定制开发的对比

一、引言 随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级的应用形态&#xff0c;已经深入到人们的日常生活和工作中。小程序以其无需安装、即用即走的特点&#xff0c;受到了广大用户的青睐。在小程序开发领域&#xff0c;模板开发和定制开发是两种常见的开发方式…

Linux: network: arp 导致问题一例

最近读openswitch的文档&#xff0c;看到下面一段话&#xff0c;说所有的CFM/BFD等协议&#xff0c;ARP修改相关的包都会经过slowpath/慢路径处理。 Performance Open vSwitch has a concept of a “fast path” and a “slow path”; ideally all packets stay in the fast pa…

[补题记录]LeetCode 6.Z字形变换

传送门&#xff1a;Z字形变换 转自&#xff1a;Z字形变换 Thought/思路 关键点在于&#xff0c;最后的答案是一行行连接起来的。 这样我们就会发现&#xff0c;这个 Z 字&#xff0c;实际上会让行数 不断加 1&#xff0c;然后又 不断减 1。每次按顺序选择 S 中的一个字符即…

基于C#使用ACCESS数据库时遇到的问题记录

一、32位版本Office与64位AccessDatabaseEngine共存安装方法 1. 使用winrar、7zip等软件将AccessDatabaseEngine_X64.exe解压缩&#xff0c;得到AceRedist.msi和files14.cat2个文件 2. 下载Orca MSI编辑修改工具。安装后&#xff0c;使用Orca打开AceRedist.msi&#xff0c;找到…

【JavaScript脚本宇宙】工具箱必备:文件处理库

不可或缺的开发工具&#xff1a;卓越的JavaScript文件操作库 前言 在这篇文章中&#xff0c;我们将深入探讨六个强大的JavaScript库&#xff0c;它们各自具有独特的功能和特性&#xff0c;能够极大地提升开发者的生产力。这些库包括用于客户端保存文件的库、CSV解析生成库、创…

【故障诊断】基于改进型的节点重构小波包频带能量谱结合概率神经网络 PNN实现轴承联合故障诊断附matlab代码

以下是基于改进型节点重构小波包频带能量谱结合概率神经网络&#xff08;Probabilistic Neural Network, PNN&#xff09;实现轴承联合故障诊断的MATLAB代码示例&#xff1a; matlab % 步骤1&#xff1a;节点重构小波包频带能量谱提取特征 function features extractFeatures…

LabVIEW在喷灌系统中的自动化实现

自动化喷灌系统在农业和园艺中有着广泛应用&#xff0c;可以显著提高水资源利用效率和作物产量。本文将介绍如何利用LabVIEW平台实现喷灌系统的自动化控制&#xff0c;涵盖项目背景、系统组成与特点、实现过程和优势。 项目背景 传统的喷灌系统通常依赖人工操作&#xff0c;效…

IF:83.5!一作兼通讯,​Nature系列综述:可以吃的机器人!

在当今科技与生物工程快速融合的时代&#xff0c;传统领域之间的界限正在逐渐模糊&#xff0c;创造了许多前所未有的创新机会。机器人设计与食品加工这两个看似无关的研究领域&#xff0c;正在通过材料特性、制造工艺和功能的交叉融合&#xff0c;展现出巨大的潜力。 可食用机器…

Python 算法交易实验70 简单回顾

说明 感觉停滞了一段时间&#xff0c;本来qtv200应该在去年12月就迭代好了。回顾了一下原因&#xff1a; 1 工作的约束。因为量化现在是打辅助的角色(现在的工作还是比较香的)&#xff0c;去年上了项目&#xff0c;几乎与世隔绝的那种&#xff0c;打断了整体的节奏。2 信心的…

ssm324基于javaweb的企业人事信息管理系统+jsp-手把手调试搭建

ssm324基于javaweb的企业人事信息管理系统jsp-手把手调试搭建 ssm324基于javaweb的企业人事信息管理系统jsp-手把手调试搭建