完全透彻了解一个asp.net core MVC项目模板2
这是《完全透彻了解一个asp.net core MVC项目模板》的第二篇,如果你直接进入了本篇博文而不知道上下文,请先阅读《完全透彻了解一个asp.net core MVC项目模板》的第一篇。
文章目录
- 一、补充几个问题
- 1、有关导航链接和Tag Helper
- 2、_ViewStart.cshtml与视图引擎加载过程
- 二、model的建立和使用
- 1、Error.cshtml
- 2、ErrorViewModel.cs
- 三、来一个自己的页面
- 1、建立模型文件
- 2、建立视图页面
- 关于Html.DisplayFor
- 关于Html.ActionLink
- 3、建立控制器
- 有可能遇到的问题
- a、在layout文件中增加一个链接
原文出处:
https://haigear.blog.csdn.net/article/details/143316084
一、补充几个问题
1、有关导航链接和Tag Helper
我们在views/share文件夹下看到有两个文件_ViewStart.cshtml、_ViewImports.cshtml和,貌似什么都没有写,就几行引用库文件的代码,尤其第二个文件中有这么一句话:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
这句话相当的有作用,否则你的导航就不灵了。原因是TagHelper起到了特别的作用,下面我们来介绍一下它的作用。
- Tag Helper的基本原理
- Tag Helpers是ASP.NET Core中的一个强大特性,它允许你在HTML元素上使用自定义属性来生成服务器端代码。
addTagHelper
是在服务配置中用于注册Tag Helper的方法,它使得相关的HTML元素能够被“增强”。 - 以
asp - controller
和asp - action
属性为例,当你在HTML<a>
标签上使用这些属性(如<a asp - controller="Home" asp - action="Index">Home</a>
),如果没有注册相应的Tag Helper,这些属性就只是普通的自定义属性,浏览器不会理解它们的特殊用途。
- Tag Helpers是ASP.NET Core中的一个强大特性,它允许你在HTML元素上使用自定义属性来生成服务器端代码。
- Tag Helper对路由的利用
- 当
addTagHelper
注册了相关的Tag Helper(例如Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper
用于<a>
标签)后,在服务器端渲染视图时,Tag Helper会介入。它会读取<a>
标签上的asp - controller
和asp - action
属性。 - 然后,根据ASP.NET Core的路由系统,它会将这些属性值转换为一个有效的URL路径。路由系统会查找
Program.cs
(或Startup.cs
)中定义的路由规则(如app.MapControllerRoute
),根据asp - controller
(控制器名称)和asp - action
(动作名称)来生成一个指向正确控制器动作的链接。
- 当
- 与HTML的对比
- 如果没有Tag Helper,
<a>
标签就会按照HTML的标准行为进行处理。HTML标准规定,<a>
标签的href
属性用于指定链接的目标URL。当没有href
属性,只有文本内容时,浏览器会将其视为普通文本,而不会将其识别为一个可以点击的链接。 - Tag Helper实际上是在服务器端为
<a>
标签动态地生成了一个合适的href
属性(或者以其他符合HTML标准的方式来创建链接),从而使得在浏览器中呈现的<a>
标签能够正确地作为一个链接,引导用户访问指定的控制器和动作。
- 如果没有Tag Helper,
2、_ViewStart.cshtml与视图引擎加载过程
这个文件更简单了,其实它的作用就是调用layout文件。开始渲染,代码如下:
@{Layout = "_Layout";
}
没有什么可讲解的。倒是视图引擎的加载过程有必要在这里说一说:
程序页面开始时视图引擎控制首先加载viewstart文件(从名字上就可以看出来,老版本的dotnet core 项目有一个startup.cs的文件,现在合并到program中去了,这个viewstart文件还留着,估计下次升级也会被合并掉)。在_ViewStart.cshtml文件(通常位于Views文件夹下)中有对布局文件的引用,如@{Layout = “~/Views/Shared/_layout.cshtml”;}。这告诉视图引擎在渲染任何视图时,都要使用这个布局文件作为模板。
当Index.cshtml被请求时,视图引擎首先加载_layout.cshtml,然后将Index.cshtml的内容插入到_layout.cshtml中定义的@RenderBody()位置。@RenderBody()是一个占位符,用于放置具体视图的内容。所以,导航栏部分(包含标签)是布局文件本身的一部分,会在每次渲染视图时一起显示在页面顶部,为用户提供导航链接。
二、model的建立和使用
1、Error.cshtml
在上一篇博文中,我们说过views\share文件夹下的Error.cshtmlh和_ValidationScriptsPartial.cshtml需要配合models来讲解。那么我们现在来看看,为什么,首先我们来看看Error.cshtml的代码:
@model ErrorViewModel
@{ViewData["Title"] = "Error";
}<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>@if (Model.ShowRequestId)
{<p><strong>Request ID:</strong> <code>@Model.RequestId</code></p>
}<h3>Development Mode</h3>
<p>Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p><strong>The Development environment shouldn't be enabled for deployed applications.</strong>It can result in displaying sensitive information from exceptions to end users.For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>and restarting the app.
</p>
它的第一行就开始引入了模型,在下面还是用到了模型的ShowRequestID属性:
if (Model.ShowRequestId)
{<p><strong>Request ID:</strong> <code>@Model.RequestId</code></p>
}
2、ErrorViewModel.cs
这个文件是models文件夹下面唯一的文件,我们来看看代码
namespace WebApplicationDemo.Models
{public class ErrorViewModel{public string? RequestId { get; set; }public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);}
}
其实,这个model文件普通得再普通不过了,就定义了一个属性和一个方法。很基础的C#知识,这里就不逐句讲解了。
原文出处:
https://haigear.blog.csdn.net/article/details/143316084
三、来一个自己的页面
1、建立模型文件
模型文件我们还是用前面博文《
一步一步从微信小程序获取asp.net Core API的数据中》使用过的Personalinfo的模型,可以直接拷贝过来
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;namespace WebApplicationDemo.Models
{public class PersonalInfo{[Required][StringLength(50)][DefaultValue("张三")]public string? Name { get; set; }[Required][Range(0, 150)][DefaultValue(24)]public int? Age { get; set; }[Required][StringLength(10)][DefaultValue("男")]public string? Gender { get; set; }[Required][EmailAddress][DefaultValue("zhangsan@example.com")]public string? Email { get; set; }[Required][Phone][DefaultValue("13788888888")]public string? PhoneNumber { get; set; }[Required][DataType(DataType.Date)][DefaultValue("2000-01-01")]public DateTime BirthDate { get; set; }[Required][StringLength(100)][DefaultValue("张家口市张家镇张家村张家冲21号")]public string? Address { get; set; }[StringLength(50)][DefaultValue("码农")]public string? Occupation { get; set; }[Required][StringLength(30)][DefaultValue("China")]public string? Nationality { get; set; }}
}
2、建立视图页面
有了模型了,我们就可以利用VS的向导来直接建立一个视图页面,在Views文件夹上右键菜单,选择添加“视图”:
添加视图时,选在模板Details,省得自己写代码,同时别忘记选择我们刚刚前面建立的模型类Personalinfo,选择好后一键生成即可得到视图文件了:
生成的页面代码自己如下:
@model WebApplicationDemo.Models.PersonalInfo@{ViewData["Title"] = "View";
}<h1>View</h1><div><h4>PersonalInfo</h4><hr /><dl class="row"><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Name)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Name)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Age)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Age)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Gender)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Gender)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Email)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Email)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.PhoneNumber)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.PhoneNumber)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.BirthDate)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.BirthDate)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Address)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Address)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Occupation)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Occupation)</dd><dt class = "col-sm-2">@Html.DisplayNameFor(model => model.Nationality)</dt><dd class = "col-sm-10">@Html.DisplayFor(model => model.Nationality)</dd></dl>
</div>
<div>@Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |<a asp-action="Index">Back to List</a>
</div>
我们发现,其实这个页面与前面我们介绍的index.cshtml页面没有什么差别,差别在@后面,大量的使用了Html关键字而不是MOdel,最后个div中包含了一个@Html.ActionLink(“Edit”, “Edit”, new { /* id = Model.PrimaryKey */ }) 我们来一起看看这些是什么意思?
关于Html.DisplayFor
a、DisplayFor方法简介
- @Html.DisplayFor是ASP.NET MVC 和ASP.NET Core MVC 中常用的一个 HTML 辅助方法(HTML Helper)。它主要用于在视图中显示模型(model)的某个属性(在这个例子中是Nationality属性)的值。
- 表达式语法(model => model.Nationality)的作用
这里的model => model.Nationality是一个 Lambda 表达式。它指定了要显示的模型属性。前面的model.Nationality,model.Occupation,model.Name,model.Age都采用的这样方法来显示。
具体来说,model代表视图中的模型对象(这个对象是由控制器传递给视图的)。=>是 Lambda 表达式的操作符,model.Nationality表示要获取模型对象的Nationality属性。这个 Lambda 表达式告诉DisplayFor方法具体要显示模型中的哪个属性。
b、工作原理
当视图被渲染时,DisplayFor方法会根据模型对象的类型和Nationality属性的类型来决定如何显示这个属性的值。
例如,如果Nationality是一个简单的字符串类型(如 “Chinese”),它可能会直接将这个字符串显示在页面上。如果Nationality是一个复杂的对象,DisplayFor可能会根据对象的ToString方法或者其他自定义的显示逻辑来呈现它的值。
另外,DisplayFor方法还会考虑数据注解(Data Annotations)等因素。如果在模型类的Nationality属性上有[DisplayFormat]或其他相关的数据注解,DisplayFor会按照注解的要求来显示属性值,例如按照指定的日期格式显示日期属性,或者按照指定的文本格式显示数值属性等。。
关于Html.ActionLink
a. @Html.ActionLink
的作用
- 和前面的Html.Dispplayfor一样
@Html.ActionLink
也是一个HTML辅助方法(HTML Helper),它的主要作用是生成一个HTML超链接(<a>
标签)。 - 在这个例子中,
@Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ })
会生成一个链接,链接的文本是“Edit”。它会将用户引导到名为“Edit”的操作(通常是控制器中的一个方法),并且在理想情况下,会将与当前模型相关的主键(这里代码被注释掉了,假设是Model.PrimaryKey
)作为参数传递过去。
b. 为什么是@Html.ActionLink
而不是@Model.ActionLink
- 首先,
Model
通常代表视图模型对象,它的主要目的是在视图和控制器之间传递数据,如业务逻辑相关的数据、状态信息等。它一般不包含用于生成HTML链接的方法。 - 而
@Html.ActionLink
是由ASP.NET提供的HTML辅助方法,它属于System.Web.Mvc.Html
命名空间(在旧版本的MVC中)或者相关的ASP.NET Core命名空间。这些HTML辅助方法是为了方便在视图中生成各种HTML元素,利用了ASP.NET的路由系统和内部逻辑来构建正确的链接,这是一种与视图渲染和路由相关的功能,不是视图模型本身应该承担的职责。
如果我们此时调整好homecontroller中的路由访问的话(具体如何调整,可以参本章的4小节“看看效果”),得到的是一个没有任何信息的浏览页
所以,我们需要给它配上一个控制器来显示数据。
3、建立控制器
与建立视图文件一样,在controllers文件件上右键菜单,选择添加“控制器”,选择
打开文件,修改代码为
using Microsoft.AspNetCore.Mvc;
using WebApplicationDemo.Models;namespace WebApplicationDemo.Controllers
{public class PersonalInfoController : Controller{public IActionResult Index(){var personalInfo = new PersonalInfo{Name = "张三",Age = 24,Gender = "男",Email = "zhangsan@example.com",PhoneNumber = "13788888888",BirthDate = new DateTime(2000, 1, 1),Address = "张家口市张家镇张家村张家冲21号",Occupation = "码农",Nationality = "China"};return View(personalInfo);}}
}
如果,我们此时运行程序观察效果,一定还是与原来一样,根本没任何改变,那么问题出在哪里呢??
有可能遇到的问题
按照ASP.NET Core MVC 的约定,视图文件的名称通常应该与控制器方法的名称相同。并且视图文件应该位于Views文件夹下的与控制器名称对应的子文件夹中
1、如果控制器是PersonalInfoController,视图文件应该在Views/PersonalInfo文件夹中,不能随便乱丢在其他文件件中。
2、控制器方法是Index,视图文件应该是Index.cshtml。我们这个项目的PersonalinfoController中的方法是Index,所以视图文件名称就是index.cshtml。不用怀疑,我们每个文件夹中都可以拥有一个index.cshtml,而不是以前我们写网站时一个网站只有一个index.asp/index.jsp/index.html。
保证上述问题后,基本就可以得到正确的浏览结果了。
看效果之前,我们也在导航中把我们的页面给挂上去,这样才能和现在的项目融为一体。那么我们需要干两件事:
a、在layout文件中增加一个链接
参照第一篇博文,找到layout中的nav标签,然后在其中增加下面的内容即可:
<li class="nav-item"><a class="nav-link text-dark" asp-area="" asp-controller="PersonalInfo" asp-action="index">PersonalInfo</a></li>
看看效果
好了,到这里,我们的《完全透彻了解一个asp.net core MVC项目模板》算是完整了,感兴趣的同学可以继续关注我的博客。
原文出处:
https://haigear.blog.csdn.net/article/details/143316084
相关文章:
完全透彻了解一个asp.net core MVC项目模板2
这是《完全透彻了解一个asp.net core MVC项目模板》的第二篇,如果你直接进入了本篇博文而不知道上下文,请先阅读《完全透彻了解一个asp.net core MVC项目模板》的第一篇。 文章目录 一、补充几个问题1、有关导航链接和Tag Helper2、_ViewStart.cshtml与…...
uniapp 如何调用音频
uniapp调用音频 button点击 <view><button click"startPlay">开始播放</button></view>方法实现 startPlay() { const innerAudioContext uni.createInnerAudioContext();innerAudioContext.src /static/sounds/oqc.mp3;innerAudioContex…...
在Facebook运营中使用住宅IP的重要性
在当前社交媒体的浪潮中,Facebook作为全球最大的社交网络之一,吸引了数以亿计的用户。为了在这一平台上实现有效的运营和推广,越来越多的博主和营销人员正在寻求最佳的养号策略。其中,IP地址的选择显得尤为重要,尤其是…...
EJB项目如何升级SpringCloud
记录某金融机构老项目重构升级为微服务过程1 如何从EJB架构拆分微服务 这个非常有趣的过程,整个过程耗时大致接近半年时光,需要考虑到重构升级保留原来的业务线,而且还要考虑后续的维护成本,保留现有的数据库表结构,…...
HTTPS 协议原理
一.HTTPS的定义 大家在刚开始学习的时候是不是也是非常好奇HTTP与HTTPS之间有什么区别和联系,两者都是应用层协议,而HTTPS是在HTTP的基础上引入了加密层,从而将HTTP的明文传输进行加密,保障数据的安全性 二.加密与解密 定义&#…...
Vxe UI 表格行编辑(默认不显示编辑框,点击后可编辑)
效果: HTML代码:(type"integer"为这个,是限制只能输入正整数或负整数,英文和汉字自动转成0) <vxe-tableshow-overflowkeep-sourcev-loading"loading":data"ruleList"ref"Table":row-config"{isHover: true}"height"…...
移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展
10月27-30日,2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商,移远通信再次亮相,并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…...
爬虫利器playwright
是什么 它是微软在 2020 年初开源的新一代自动化测试工具,其功能和 selenium 类似,都可以驱动浏览器进行各种自动化操作。还可以录制脚本 案列-01 运行之后我们用它自动打开的谷歌浏览器,打开百度,输入漂亮小姐姐并查找&#x…...
着色器的认识
知识了解: 着色器: 顶点着色器: 用来描述顶点的特性,如位置、颜色等,其中,顶点:是指二维或三维空间中的一个点比如交点或者端点。 片元着色器:用来进行逐片元处理操作,比如光照、颜色叠加等&…...
科技的成就(六十四)
591、《传奇》开始公开测试 "2001 年 9 月,《传奇》开始公开测试。《传奇》(全称《热血传奇》)是由韩国 WeMade 娱乐开发制作的大型多人在线角色扮演游戏,由 Delphi 编写。盛大网络于2001 年获得该游戏在中国的代理权。《传奇…...
银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...
全文链接:https://tecdat.cn/?p38026 分析师:Fanghui Shao 在当今金融领域,风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户,还是信贷风控模型的构建,以及基于决策树的银行信贷风险预警,…...
〈壮志凌云:独行侠〉中的超高音速战机
电影《壮志凌云:独行侠》中使用的黑星(Darkstar)高超音速概念战机模型,虽然看起来像是科幻电影里的产物,但这架飞机实际上是由洛克希德马丁公司的臭鼬工厂(Skunk Works)设计,这是一家…...
k8s集群 ceph rbd 存储动态扩容
k8s 集群 rbd 扩容有两种方法,如下所示 通过StorageClass自动扩容 # kubectl get sc csi-rbd-sc -oyaml|grep allowVolumeExpansion allowVolumeExpansion: true如果搜索有如上字段,说明是可以自动扩容的,修改对应要扩容的 PVC容量…...
C语言笔记(指针题目)例题+图解
本文分为两部分 ,第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析,第二部分是一些笔试题目。若有错误,请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…...
从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)
从零开始的 vue项目部署到服务器详细步骤(vue项目build打包nginx部署配置ssl证书) 文章目录 从零开始的 vue项目部署到服务器详细步骤(vue项目build打包nginx部署配置ssl证书)一、前言二、vue项目部署前配置1、vite.config.js 增加…...
[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来
前言 又到了一年一度大家最爱的探会文章,非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会,作为一个经常参加线下探会的博主,每一次体验都有所不同,每一次新技术的突破都让人感到无比兴奋。同时,作为数…...
项目:抽奖系统
文章目录 1. 项目:抽奖系统 1. 项目:抽奖系统 from faker import Fakerfk Faker(localezh_CN)name_list [] for i in range(100):name_list.append(fk.name()) print(name_list)import randomclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__…...
synchronized进阶原理
synchronized进阶原理 1.轻量级锁 轻量级锁的使用场景:如果一个对象虽然有多个线程访问,但多线程访问的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化(如果出现竞争,操作系统会将轻量级锁升级为重量级锁)。轻量级锁对使用者是透明的(由操作系统控制),即语法仍是s…...
C++,STL 052(24.10.29)
内容 1.对map容器的大小进行操作。 2.map容器的交换操作。 运行代码 #include <iostream> #include <map>using namespace std;void printMap(map<int, int> &m) {for (map<int, int>::iterator it m.begin(); it ! m.end(); it){cout <<…...
git下载和配置
git是什么? Git是一种分布式版本控制系统,用于跟踪文件的变化,尤其是源代码。它允许多个开发者在同一项目上进行协作,同时保持代码的历史记录。Git的主要特点包括: 分布式:每个开发者都有项目的完整副本&a…...
Linux基础—基础命令及相关知识5(ubuntu网络配置)
网络的配置方法 centos网络配置 centos的网卡位置 /etc/sysconfig/network-scripts/ifcfg-ens33(centos网卡文件) bootproto表示获得IP地址的方式是静态的还是动态 onboot表示启动系统时是否激活该网络接口 设置IP地址,子网掩码,网关,dns…...
使用 firewall-cmd 管理 Linux 防火墙
firewalld-cmd命令翻译<一> Linux 系统中,firewalld 是一个流行的动态防火墙管理工具, firewall-cmd 是它的命令行接口。通过 firewall-cmd,可以轻松地管理防火墙规则、配置区域(zones)、处理端口等。 这篇文章…...
鸿蒙OS试题
哪些是持续部署最佳实践? A. 灰度发布:先在小部分用户或区域进行部署,观察没问题后再全面推广 B.手工部署:持续部署可以采用手工部署的方式发布软件: 1、有一份非常详尽的文档,该文档描述了执行步骤及每个步骤中易出错的地方; 2、以手工测试来确认该…...
Flutter InkWell组件去掉灰色遮罩
当InkerWell组件内部获取到焦点时,会展示一层灰色遮罩 将focusColor属性设置为透明即可 Flutter InkWell焦点效果源码分析 问题描述 当 InkWell 组件获得焦点时,会显示一层灰色遮罩效果。需要找出这个效果是由哪些组件控制的,以及具体的…...
Android——metaData
获取元数据信息的步骤: 调用 getPackageManager 方法获得当前应用的包管理器调用包管理器的 getActivityInfo 方法获得当前活动的信息对象活动信息对象的 metaData 是 Bundle 包裹类型,调用包裹对象的 getString 即可获得指定名称的参数值 配置 metaDa…...
SLAM|1. 相机投影及相机畸变
一个能思考的人,才真是一个力量无边的人。——巴尔扎克 本章主要内容: 1.针孔相机模型 2.相机成像的几个坐标系图像 3.畸变及相机标定 本节主要介绍在照相机拍摄过程中,现实物体如何跟照片上的像素关联起来,具体涉及相机成像的物…...
nginx配置及虚拟主机
nginx配置及虚拟主机 一、http协议介绍1、网站类型2、涉及的软件3、http协议介绍 二、nginx安装、启动1、nginx介绍2、nginx安装3、nginx启动管理 三、nginx配置文件1、配置文件语法结构2、全局配置3、事件驱动模型的配置4、http的配置 四、虚拟主机配置1、类型2、基于名称的虚…...
ElasticSearch - Bucket Script 使用指南
文章目录 官方文档Bucket Script 官文1. 什么是 ElasticSearch 中的 Bucket Script?2. 适用场景3. Bucket Script 的基本结构4. 关键参数详解5. 示例官方示例:计算每月 T 恤销售额占总销售额的比率百分比示例计算:点击率 (CTR) 6. 注意事项与…...
Android的SQLiteOpenHelper类 笔记241027
SQLiteOpenHelper SQLiteOpenHelper是Android开发中用于管理SQLite数据库的一个非常重要的工具类。以下是对SQLiteOpenHelper的详细介绍: 一、基本概念 SQLiteOpenHelper是一个抽象类,它主要用于管理数据库的创建和版本管理。通过继承这个类ÿ…...
「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用
本篇将通过一个简单的计数器应用,带你体验鸿蒙开发环境的实际操作流程。本项目主要练习组件的使用、事件响应和状态管理,帮助开发者熟悉基本的应用构建流程。 关键词 计数器应用组件操作事件响应状态管理HarmonyOS 应用开发一、创建计数器项目 1.1 在 DevEco Studio 中新建项…...
响应式网站广州网站建设/百度刷排名seo
本文转载自:http://blog.csdn.net/a567890k/article/details/52956798 最近编译Android6.0时经常出现以下错误 临时解决方法: Building with Jack: out/target/common/obj/APPS/Launcher3_intermediates/with-local/classes.dexERROR: Security problem,…...
团购模板网站/邯郸seo营销
信息存储大多数计算机使用八位的块,或者字节,作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都由一个唯一的数字来标识,称为它的地址…...
wordpress文章字号/女生学电子商务好吗
转自:http://bbs.9ria.com/thread-210322-1-1.html 首先,从copy开始说,简而言之,copy的目的就是生成一个新的实例,然后把其成员都按原实例赋值。对于非指针型的成员,比如BOOL, int, float,这样的…...
网站建设需要的费用/如何优化关键词的方法
Linux开发板 - 01 - 远程通讯/控制(SSH/VNC/FTP) 前言:最近向学校实验室借了一块Linux开发板(我一开始还以为是树莓派,本来想借树莓派的),开始接下来一段时间会记录学习过程。我借的是韦东山的J…...
网站建设 短信群发模板/郑州网站建设哪家好
system.mss ----> Peripheral Drivers -----> Import Examples 也可以通过边上的文档 查看函数信息...
如何搜索网站/58同城黄页推广
为什么80%的码农都做不了架构师?>>> 效果图示: 主要代码: <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>根据可见状态确定 是否显示或隐藏元素</title><script s…...