在默认的情况下,不论是对于编辑模式还是显示模式,一个布尔类型的属性值总是以一个CheckBox的形式呈现出来。我们创建如下一个表示员工的类型Employee,它具有一个布尔类型的属性IsPartTime表示该员工是否为兼职。
现在我们希望的是将所有布尔类型对象显示为两个RadioButton,具体的显示效果如下图所示。那么我们就可以通过创建一个Model类型为Boolean的View来创建一个模板,使之改变所有布尔类型对象的默认呈现效果。
由于我们需要改变的是布尔类型对象在编辑模式下的呈现形式,所以我们需要将作为模板的分布View定义在EditorTemplates目录下,这个目录可以存在于Views/ Shared下,也可以存在于Views/{ControllerName}下。由于ASP.NET MVC是采用数据类型作为匹配条件来寻找对应的模板的,所以我们需要将分部模板View命名为Boolean。下面的代码片断体现了这个分部试图的整个定义,我们通过调用HtmlHelper的RadioButton方法将两个布尔值(True/False)映射为对应的RadioButton,并且采用
来布局。
@model bool
@Html.RadioButton("",true,Model)是
@Html.RadioButton("",false,!Model)否
值得一提的是,我们没有指定RadioButton的名称,而是指定一个空字符串,Html本身会对其进行命名,而命名的依据就是本章介绍的核心:Model元数据。Employee的IspartTime属性呈现在界面上对应的HTML如下所示,我们可以看到两个类型为radio的 元素的name被自动赋上了对应的属性名称。美中不足的是它们具有相同的ID,如果希望让ID具有唯一性,可以对模板进行更加细致的定制。
二、预定义模板
上面我们介绍如何通过View的方式创建模板进而控制某种数据类型或者某个目标元素最终在UI界面上的HTML呈现方式,实际上在ASP.NET MVC的内部还定义了一系列的预定义模板。当我们调用HtmlHelper/HtmlHelper的模板方法对Model或者Model的某个成员进行呈现的时候,系统会根据当前的呈现模式(显示模式和编辑模式)和Model元数据获取一个具体的模板(自定义模版或者预定义模版)。由于Model具有显示和编辑两种呈现模式,所以定义在ASP.NET MVC内部的默认模版分为这两种基本的类型。接下来我们就逐个介绍这些预定义模版以及最终的HTML呈现方式。
EmailAddress 该模板专门针对用于表示Email地址的字符串类型的数据成员,它将目标元素呈现为一个href属性具有“mailto:”前缀的链接( )。由于该模板仅仅用于Email地址的显示,所以只在显示模式下有效,或者说ASP.NET MVC仅仅定义了基于显示模式的EmailAddress模板。为了演示数据在不同模板下的呈现方式,我们定义了如下一个简单的数据类型Model,我们通过在属性Foo上应用UIHintAttribute特性将模板名称设置为“EmailAddress”。
public class Model
{
[UIHint("EmailAddress")]
public string Foo { get; set; }
}
然后在一个基于Model类型的强类型View中,我们通过调用HtmlHelper的DisplayFor方法将一个具体的Model对象的Foo属性以显示模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
如下的代码片断表示Model的Foo属性对应的HTML,我们可以看到它就是一个针对Email地址的连接。当我们点击该链接的时候,相应的Email编辑软件(比如Outlook)会被开启用于针对目标Email地址的邮件编辑。
HiddenInput 关于默认模板HiddenInput我们不应该感到模式,前面介绍的HiddenInputAttribute特性就是将表示Model元数据的ModelMetadata对象的TemplateHint属性设置为HiddenInput。如果目标元素采用HiddenInput模板,在显示模式下内容会以文本的形式显示;编辑模式下不仅会以文本的方式显示其内容,还会生成一个对应的type属性为“hidden”的 元素。如果表示Model元数据的ModelMetadata对象的HideSurroundingHtml属性为True(将应用在目标元素上的特性HiddenInputAttribute的DisplayValue属性设置为False),不论是显示模式还是编辑模式下显示的文本都将消失。
同样以上面定义的数据类型Model为例,我们通过在Foo属性上应用UIHintAttribute特性将模板名称设置为“HiddenInput”。
public class Model
{
[UIHint("HiddenInput")]
public string Foo { get; set; }
public bool Bar { get; set; }
public decimal Baz { get; set; }
}
然后在一个基于Model类型的强类型View中分别调用HtmlHelper的DisplayFor和EditFor方法将一个具体的Model对象的Foo属性以显示和编辑模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.EditorFor(m=>m.Foo)
分别以两种模式呈现出来的Foo属性对应的HTML如下(包含在花括号中的GUID表示属性值)。第一行是针对显示模式的,可以看出最终呈现出来仅限于表示属性值得文本;而编辑模式对应的HTML中不仅包含属性值文本,还具有一个对应的类型为“hidden”的 元素。
{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}
{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}
现在我们对数据类型Model做一下简单修改,将应用在属性Foo上的UIHintAttribute特性替换成HiddenInputAttribute特性,并将其DisplayValue属性设置成False。
public class Model
{
[HiddenInput(DisplayValue = false)]
public string Foo { get; set; }
public bool Bar { get; set; }
public decimal Baz { get; set; }
}
由于应用在目标元素上的HiddenInputAttribute特新的DisplayValue属性会最终控制对应ModelMetadata的HideSurroundingHtml属性,而后者控制是否需要生成用于显示目标内容的HTML。所以针对针对的Model定义,最终会生成如下一段HTML。
Html
如果目标对象的内容包含一些HTML,并需要在UI界面中原样呈现出来,我们可以采用Html模板。和EmailAddress模板一样,该模板仅限于显示模式 。为了演示Html模板对目标内容的呈现方法与默认呈现方式之间的差异,我们定义了如下一个数据类型Model。该数据类型具有两个字符串类型的属性Foo和Bar,其中Foo上面应用UIHintAttribute特性将模板名称设置为“Html”。
public class Model
{
[UIHint("Html")]
public string Foo { get; set; }
public string Bar { get; set; }
}
现在我们创建一个具体的Model对象,并将Foo和Bar设置为一段表示链接的文本(google.com ),最终在一个基于Model类型的强类型View中通过调用HtmlHelper的DisplayFor方法将这两个属性以显示模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.DisplayFor(m => m.Bar)
从如下所示的表示Foo和Bar两属性的HTML中我们不难看出:采用Html模板的Foo属性的内容原样输出,而包含在属性Bar中的HTML都进行了相应的编码。
Text与String
不论是在显示模式还是编辑模式,Text和String模板具有相同的HTML呈现方式(实际上在ASP.NET MVC内部,两种模版最终生成的HTML是通过相同的方法产生的)。对于这两种模版来说,目标内容在显示模式下直接以文本的形式输出;而在编辑模式下则对应着一个单行的文本框。
为了演示两种模版的同一性,我们对上面定义数据类型Model略作修改,在属性Foo和Bar上应用UIHintAttribute特性并将模版名称分别设置为String和Text。
public class Model
{
[UIHint("String")]
public string Foo { get; set; }
[UIHint("Text")]
public string Bar { get; set; }
}
然后我们创建一个具体的Model对象,并在一个基于该Model类型的强类型View中通过调用HtmlHelper的DisplayFor和EditorFor将两个属性分别以显示和编辑模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.DisplayFor(m => m.Bar)
@Html.EditorFor(m=>m.Foo)
@Html.EditorFor(m => m.Bar)
如下所示的代码片断体现了上述四个元素对应的HTML(“Dummy text …”是Foo和Bar的属性值),可以看到采用了Text和String模板的两个属性在显示和编辑模式下具有相同的呈现方式。编辑模式下输出的类型为“text”的 元素表示CSS特性类型的class属性被设置为“text-box single-line”,意味着这是一个基于单行的文本框。
值得一提的是,ASP.NET MVC内部采用基于类型的模板匹配机制,对于字符串类型的数据成员,如果没有显式设置采用的模板名称,默认情况下会采用String模板。
Url
与EmailAddress和Html一样,模板Url也仅限于显示模式。对于某个表示为Url的字符串,如果我们希望它最终以一个连接的方式呈现在最终生成的HTML中,我们采用该模板。如下面的代码片断所示,我们通过应用UIHintAttribute特性将模板Url应用到属性Foo中。
public class Model
{
[UIHint("Url")]
public string Foo { get; set; }
}
我们创建一个具体的Model对象,并将Foo属性设置为一个表示Url的字符串“http://www.asp.net”,最后通过如下的方式将该属性以显示模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
如下面的代码片断所示,该属性最终呈现为一个href属性和文本内容均属性值得连接( )。
MultilineText 一般的字符串在编辑模式下会呈现为一个单行的文本框(类型为“text”的 元素),而MultilineText模板会将表示目标内容的字符串通过一个
public class Model
{
[UIHint("MultilineText")]
public string Foo { get; set; }
}
现在我们创建一个具体的Model对象并通过如下的形式将Foo属性以编辑模式呈现在某个基于Model类型的强类型View中。
@model Model
@Html.EditorFor(m=>m.Foo)
如下所示的代码片断表示Model的Foo属性呈现在UI界面中的HTML(“dummy text …”是是Foo的属性值),我们可以看到这是一个< textarea >元素。表示CSS样式类型的class属性被设置为“text-box multi-line”,意味着它是以多行的效果呈现。
Password
对于表示密码字符串来说,在编辑模式下应该呈现为一个类型为“password”的 元素,使我们输入的内容以掩码的形式显示出来以保护密码的安全性。在这种情况下我们可以采用Password模板,该模板和MultilineText一样也仅限于编辑模式。如下面的代码片断所示,我们在Model的Foo属性上应用UIHintAttribute特性将模式名称设置为“Password”。
public class Model
{
[UIHint("Password")]
public string Foo { get; set; }
}
我们创建一个具体的Model对象,并通过如下的形式将Foo属性以编辑模式呈现在某个基于Model的强类型View中。
@model Model
@Html.EditorFor(m=>m.Foo)
该Foo属性最终会以如下的形式通过一个类型为“Password”的 元素呈现出来,表示CSS样式类型的class属性被设置为“text-box single-line password”,意味着呈现效果为一个单行的文本框。
Decimal
如果采用Decimal模板,代表目标元素的数字不论其小数位数是多少,都会最终被格式化为两位小数。在显示模式下,被格式化的数字直接以文本的形式呈现出来;在编辑模式下则对应着一个单行的文本框架。如下面的代码片断所示,我们在数据类型Model中定义了两个对象类型属性Foo和Bar,上面应用了UIHintAttribute特性并将模板名称指定为“Decimal”。
public class Model
{
[UIHint("Decimal")]
public object Foo { get; set; }
[UIHint("Decimal")]
public object Bar { get; set; }
}
我们创建一个具体的Model对象,将它的Foo和属性分别设置为整数123和浮点数3.1415(4位小数),最终通过如下的形式将它们以显示和编辑的模式呈现在一个基于Model类型的强类型View中。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.DisplayFor(m=>m.Bar)
@Html.EditorFor(m=>m.Foo)
@Html.EditorFor(m =>m.Bar)
上述四个元素在最终呈现的UI界面中对应着如下的HTML,我们可以看到最终显示的都是具有两位小数的数字。
Boolean
通过本章最开始的实例演示我们知道一个布尔类型的对象在编辑模式下会以一个类型为“checkbox”的 元素的形式呈现,实际上在显示模式下它依然对应着这么一个元素,只是其disabled属性会被设置为True使之处于只读状态。布尔类型的这种默认呈现方式源自“Boolean”模板默认被使用。
当布尔类的目标元素以编辑模式进行呈现的时候,除了生成一个一个类型为“checkbox”的 元素之外还会附加产生一个类型为“hidden”的 元素。如下面的代码片断所示,这个hidden元素具有与CheckBox相同的名称,但是值为False,它存在的目的在于当CheckBox没有被勾选的情况下通过对应的hidden元素向服务区提交相应的值(False),因为没有被勾选的CheckBox的值是不会包含在请求中的。
Boolean和String、Decimal以及后面我们介绍的Object一样属于是基于CLR类型的模板。由于ASP.NET在内部采用基于类型的模板匹配策略,如果没有显示设置采用的模板类型,相应类型的元素会默认采用与之匹配的模板。
Collection
顾名思义,Collection模板用于集合类型的目标元素的显示与编辑。对应采用该模板的类型为集合(实现了IEnumerable接口)的目标元素,在调用HtmlHelper或者HtmlHelper以显示或者编辑模式对其进行呈现的时候,会遍历其中的每个元素,并根据基于集合元素的Model元数据决定对其的呈现方法。同样一我们定义的数据类型Model为例,我们按照如下的方式将它的Foo属性类型改为对象数组,上面应用了UIHintAttribute特性并将模板名称 设置为“Collection”。
public class Model
{
[UIHint("Collection")]
public object[] Foo { get; set; }
}
然后按照下面的方式创建一个包含三个对象的数组,作为数据元素的三个对象类型为别是数字、字符串和布尔,然后将该数组作为Foo属性创建一个具体的Model对象。
object[] foo = new object[]
{
123.00,
"dummy text ...",
true
};
Model model = new Model { Foo = foo };
在一个基于Model类型的强类型View中,我们分别调用HtmlHelper的DisplayFor和EditorFor方法将上面创建的Model对象的Foo属性以显示和编辑模式呈现出来。
@model Model
@Html.DisplayFor(m=>m.Foo)
@Html.EditorFor(m=>m.Foo)
Model对象的Foo属性最终呈现出来的HTML如下所示,我们可以看到不论是显示模式还是编辑模式,基本上就是对集合元素呈现的HTML的组合而已。
我们说过,ASP.NET 内部采用基于类型的模板匹配策略,如果通过ModelMetadata对象表示的Model元数据不能找到一个具体的模板,最终都会落到Object模板上。Object模板对目标对象的呈现方式很简单,它通过ModelMetadata的Proeprties属性得到所有基于属性的Model元数据。针对每个表示属性Model元数据的ModelMetadata,它会根据DisplayName或者属性名称生成一个标签(实际上是一个内部文本为显示名称的
元素),然后根据元数据将属性值以显示或者编辑的模式呈现出来。
public class Address
{
[DisplayName("省")]
public string Province { get; set; }
[DisplayName("市")]
public string City { get; set; }
[DisplayName("区")]
public string District { get; set; }
[DisplayName("街道")]
public string Street { get; set; }
}
针对上面定义得这个表示地址的Address。现在我们创建一个具体的Address对象并通过如下的方式调用HtmlHelper的DisplayForModel方法将它呈现在以此作为Model的View中。
@model Address
@Html.DisplayForModel()
从如下所示的HTML中我们可以看出作为Model的Address对象的所有属性都以显示模式呈现出来,而在前面还具有相应的标签。
省
江苏省
市
苏州市
区
工业园区
街道
星湖街328号
值得一提的是,Object模板在对属性进行遍历的过程中,不论是显示模式还是编辑模式,只会处理非复杂类型。也就是如果属性成员是一个复杂类型(不能支持从字符串类型的转换),它不会出现在最终生成的HTML中。
public class Contact
{
[DisplayName("姓名")]
public string Name { get; set; }
[DisplayName("电话")]
public string PhoneNo { get; set; }
[DisplayName("Email地址")]
public string EmailAddress { get; set; }
[DisplayName("联系地址")]
public Address Address { get; set; }
}
通过上面的代码片断,我们定义了一个表示联系人的数据类型Contact,它具有一个类型的Address的同名属性。现在我们创建一个具体的Contact对象,并 对包括Address 属性在内的所有属性进行初始化,然后通过如下的方式通过调用HtmlHelper的DisplayForModel方法将它呈现在以此作为Model的View中。
@model Contact
@Html.DisplayForModel()
从如下所示的HTML可以看出,Contact的数据成员Address由于是复杂类型,其内容并不会呈现出来。
姓名
张三
电话
1234567890
Email地址
我们可以有两种方式解决这个问题,其实就是通过为Address类型定义各类专门的模板用于地址信息的显示和编辑,通过UIHintAttribute特性将此模板名称应用到Contact的Address属性上,然后调用DisplayFor/EditorFor将该属性呈现出来。另一种就是按照类似如如下的方式手工将负责类型属性成员呈现出来。
@model Contact
@Html.DisplayForModel()
@Html.DisplayName("Address")
@(Model.Address.Province + Model.Address.City + Model.Address.District+ Model.Address.Street)
以上就是关于ASP.NET预定义模板介绍,希望对大家的学习有所帮助。
你可能感兴趣的:(ASP.NET预定义模板介绍)
Docker原理 Namespace
Docker是一个开源的容器化平台,使用了多种Linux内核特性来实现隔离和资源管理。其中,Namespace(命名空间)是Docker实现进程隔离的核心技术之一。Namespace提供了对操作系统资源的视图隔离,使得容器内的进程以为它们独占了系统资源。本文将详细介绍Docker的Namespace机制。一、Namespace概述Namespace是Linux内核的一项关键技术,用于隔离不同进程的
【Redis】StringRedisTemplate 和 RedisTemplate 的区别
星星点点洲
redis 缓存
StringRedisTemplate和RedisTemplate是SpringDataRedis提供的两种用于操作Redis的模板类,它们的核心区别在于序列化方式和操作的数据类型。以下是两者的主要区别和使用建议:✅1.数据类型支持类名支持的数据类型说明RedisTemplate支持所有Redis数据结构(如String、Hash、List、Set、ZSet)可以操作任意Java对象,但需要手动配
Spring Boot 和 Netty
Hao4K影音
spring boot 后端 java spring
SpringBoot和Netty是两个强大的工具,它们各自有不同的用途和优势,但可以结合使用来构建高性能的网络应用。下面将详细介绍SpringBoot和Netty,以及它们如何结合使用。SpringBoot简介SpringBoot是一个开源框架,基于Spring框架,用于简化Spring应用的开发过程。它通过以下方式简化开发:自动配置:根据类路径中的依赖自动配置Spring应用程序。开箱即用的设置
mysql 清理磁盘空间
汐猫
mysql 数据库
数据库相关学习资料:https://edu.51cto.com/video/655.htmlMySQL清理磁盘空间:代码示例与流程指南MySQL是一种广泛使用的开源关系数据库管理系统,它在处理大量数据时可能会占用大量的磁盘空间。随着时间的推移,数据库可能会积累许多不再需要的数据,导致磁盘空间不足。本文将介绍如何清理MySQL数据库中的磁盘空间,包括代码示例和流程图。清理磁盘空间的原因性能提升:清理
说话的分寸,就是做人的分寸
莫向身外求
说话的分寸,就是做人的分寸听过一个故事:古希腊哲学家苏格拉底非常善于演说,有不少年轻人慕名来向他求教。一天,有位青年前来求教,那位青年自我介绍时,为了表现自己,便高谈阔论,在苏格拉底面前大谈演说如何重要。苏格拉底等他说完后,向他索取了两倍的学费。青年不解,询问原因。苏格拉底答道:“因为我除了要教你讲话,还要教你如何闭嘴。”正如海明威说的那样:“人用两年时间学会说话,却要用一辈子学会闭嘴。”会说话,
扫雷游戏介绍和代码
二进制person
游戏 c语言
一.介绍游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格子默认随机布置10个雷可以排查雷如果位置不是雷,就显⽰周围有⼏个雷如果位置是雷,就炸死游戏结束把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束二.界面1.初始界面2.游戏界面3.退出界面和选择错误三.代码text2.c:#define_CRT_SECURE_NO_WARNINGS1#include"game.h"voidme
springboot集成Netty
墨_风
开发笔记 spring boot java netty
一、Netty介绍Netty的系列文章,正在更新中二、Netty集成io.nettynetty-all2.1、配置文件#netty配置netty:boss:1#boss线程数量默认为cpu线程数*2worker:4#worker线程数量默认为cpu线程数*2timeout:6000#连接超时时间默认为30sport:7000#服务器主端口默认7000portSalve:7001#服务器备用端口默认
闲鱼监控助手:挖掘隐藏的宝藏商品
如何通过闲鱼监控助手挖掘隐藏的宝藏商品概述:在闲鱼这个二手交易平台上,有许多隐藏的宝藏商品等待着我们的发现。而要有效地挖掘这些宝藏商品,我们可以借助闲鱼监控助手。本文将详细介绍如何使用闲鱼监控助手来寻找并购买隐藏的宝藏商品。1.安装并设置闲鱼监控助手首先,我们需要在手机上安装并打开闲鱼监控助手应用。然后,在应用内的设置页面中,我们可以根据自己的需求进行一些个性化设置。例如,设置关键词、价格范围、筛
闲鱼监控助手:让你的二手购物更加智能化(pb闲鱼监控)
keji689
大数据
概述闲鱼监控助手是一款可以帮助用户更加智能化购买二手商品的应用程序。它可以自动监测商品价格变化、货源情况和评论评分等信息,并提供给用户最佳的购物建议。本文将介绍如何使用这个应用程序,以及它可以为你的二手购物带来的便利。如何使用闲鱼监控助手首先,你需要下载并安装这个应用程序。在安装完成后,你需要在设置页面中输入你的闲鱼账号信息。这样应用程序才能够获取你的购物历史和偏好信息,从而为你提供更加个性化的服
从现在开始,让闲鱼监控助手帮你省时省力找宝贝(闲鱼监控助手)
闲鱼监控助手:省时省力找宝贝的利器在如今这个信息爆炸的时代,网购已经成为我们获取商品和服务的主要途径之一。然而,随之而来的是琳琅满目的商品选择,如何在海量商品中快速找到符合自己需求的宝贝成为了一个挑战。幸运的是,闲鱼监控助手作为一款强大的工具,可以帮助我们省时省力地找到心仪的宝贝。功能介绍闲鱼监控助手具有多项实用功能,包括价格监控、关键词搜索、定时提醒等。通过设置价格监控功能,用户可以轻松追踪商品
C++之vector类的代码及其逻辑详解(上)
啊吧怪不啊吧
C++ 开发语言 C++ c++
1.vetcor介绍及使用方法1.1什么是vector1.vetcor是一种可以自己扩容的数组(扩大后不会变小)。2.vector采用的连续存储空间来存储元素,这意味着我们可以小标的方式来对其进行访问。3.vetcor在进行扩容的时候会尝试直接在其后面的空间进行扩容,如果后面的空间被其他的数据给使用了,那么它会寻找一块足够存放的下扩容候的它的空间,然后把自己转移进那块空间(一般来说vetcor在设
免费版酒店押金原路退回系统——仙盟创梦IDE
未来之窗软件服务
软件架构思维-阿雪技术观念 仙盟创梦IDE 东方仙盟 酒店管理系统
项目介绍东方仙盟开源酒店押金管理系统是一款面向中小型酒店、民宿、客栈的轻量级前台管理工具,专注于简化房态管理、订单处理和押金跟踪流程。作为完全开源的解决方案,它无需依赖任何第三方服务,所有数据存储在本地浏览器中,确保数据安全性与访问便捷性。核心功能房态实时管理:通过直观的卡片式界面展示房间状态(空房/在住),支持快速查看与操作订单全流程处理:从入住登记、押金收取到退房结算的完整流程管理基础资料维护
Python 线程优先队列 PriorityQueue - Python零基础入门教程
猿说编程
目录一.Python线程队列Queue分类二.Python线程优先队列PriorityQueue简介三.Python线程优先队列PriorityQueue函数介绍四.Python线程优先队列PriorityQueue使用五.猜你喜欢零基础Python学习路线推荐:Python学习目录>>Python基础入门在线程队列Queue/线程队列LifoQueue文章中分别介绍了先进先出队列Queue和先进
2020北京大学西班牙语语言文学考研详情介绍、必看经验指导
xxxedu666
学习方式全日制招生人数2019拟招4人研究方向00.不区分研究方向考试科目①101思想政治理论②201英语一③620综合考试④844西班牙语语言文学复试线18年:总分330政治英语50/专业课9017年:总分330政治英语50/专业课9016年:总分340政治英语50/专业课902018录取闵逸菲初试分数386.5
使用Debug-View Kotlin,提升你的Android调试体验!
侯深业Dorian
使用Debug-ViewKotlin,提升你的Android调试体验!去发现同类优质开源项目:https://gitcode.com/1、项目介绍Debug-ViewKotlin是一个专为Android开发者设计的高效、直观的浮层调试控制台。它会在应用界面的最上方提供实时的性能指标和日志信息,包括但不限于内存占用、帧率(FPS)、启动时间和各种自定义的日志数据。只需简单集成,就能让开发和测试过程变
大白话科普用数字人民币发工资有何不同?
侯1984
4月22日,常熟市印发《关于实行工资全额数字人民币发放的通知》,称从5月开始,对常熟市在编公务员实行工资全额数字人民币发放。这一消息很快冲上热搜,我看了看评论,发现大家对数字人民币并不熟悉,我先用大白话介绍一下数字人民币,再来讨论此次常熟用数字人民币发工资的原因。为什么会出现数字人民币?数字人民币对标的是比特币,和比特币不同之处在于数字人民币有发行主体,即央行。在比特币蹿红的时期,数字人民币从研究
深度强化学习 | 图文详细推导深度确定性策略梯度DDPG算法
Mr.Winter`
机器人 人工智能 数据挖掘 深度学习 神经网络 强化学习 具身智能
目录0专栏介绍1演员-评论家架构1.1Critic网络优化1.2Actor网络优化2深度确定性策略梯度算法0专栏介绍本专栏以贝尔曼最优方程等数学原理为根基,结合PyTorch框架逐层拆解DRL的核心算法(如DQN、PPO、SAC)逻辑。针对机器人运动规划场景,深入探讨如何将DRL与路径规划、动态避障等任务结合,包含仿真环境搭建、状态空间设计、奖励函数工程化调优等技术细节,旨在帮助读者掌握深度强化学
淘宝积分有什么用?介绍淘宝积分可以干什么
高省张导师
支付宝、淘宝、飞猪等都是很多人购物、支付的常用工具,虽然它们同属阿里巴巴旗下,但会员和积分体系却是「各自为政」,很多人平时也懒得花心思研究其区别和用途。事实上,了解这些会员的权益和积分的用法,可以让我们从中获取一些福利。本文将带你深入了解支付宝、淘宝、飞猪这三大产品的会员及其积分用法。大家好,我是高省APP最大团队,高省APP,是2022年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,
【前端】ikun-pptx编辑器前瞻问题二: pptx的压缩包结构,以及xml正文树及对应元素介绍
文章目录PPTX文件本质:一个压缩包核心文件解析1.幻灯片内容文件(ppt/slides/slideX.xml)2.元素类型解析文本框元素(p:sp)图片元素(p:pic)单位系统开发注意事项参考工具pptx渲染路线图PPTX文件本质:一个压缩包PPTX文件实际上是一个遵循OpenXML标准的ZIP压缩包,包含多个XML文件和其他资源。我们可以通过解压工具查看其内部结构:pptx文件├──[Con
主播快速变现的技巧是什么?抖音快手主播变现的6种方法(建议收藏)
好项目高省
不管是抖音平台,还是快手平台,我们发展粉丝,有了粉丝基础那么下一步就是变现,那么变现的几种方法都有哪些?今天盘点6种变现方式,最后一种及其重要,实现被动收益,相信各位直播见过有人推广软件,推广游戏吧,只要他们玩,或使用软件就有源源不断的收益,甚至有的主播月收益高达百万!1、带货模式主播通过视频直播展示和介绍商品,让卖货可以不受时间和空间的限制,并且可以让用户更直观的看到和体验到产品。用户看直播时可
荤素搭配饭菜同煮,咸肉菜饭配万年青榨菜汤,上班族快手美食做法
一偏之明
下班回家,筋疲力尽,饥肠辘辘,晚饭吃什么?外卖不卫生,自己做太麻烦?想您所想,为您支招,介绍这一款30分钟出齐的米饭、荤素菜、汤套餐。荤素搭配饭菜同煮,咸肉菜饭配万年青榨菜汤,上班族快手美食做法材料主料:粳米100克,小青菜100克,五花腊肉50克,火腿50克,万年青10克,榨菜丝10克。调料:猪油5克,盐2克,生抽3毫升,生姜5克,芝麻油3克。步骤1.腊肉和火腿切片或者切丁备用(也可以用腊肠等其
Vue3 实现 DOCX 文档在线预览功能(基于 docx-preview)
Vue3实现DOCX文档在线预览功能(基于docx-preview)在本篇文章中,我们将介绍如何使用Vue3+docx-preview来实现浏览器端的.docx文档预览功能。项目依赖首先需要安装以下依赖:npminstalldocx-previewaxios组件代码详解Template部分预览DOCX按钮用于触发加载文档事件,文档内容将渲染在docxContainer容器中。Script部分imp
探秘Wordle利剑:wordle-list,猜词游戏的高效工具箱
探秘Wordle利剑:wordle-list,猜词游戏的高效工具箱在当今风靡全球的文字游戏中,Wordle以其简约不简单的魅力吸引了无数玩家。今天,我们将深入探讨一款为Wordle发烧友量身打造的开源神器——wordle-list。这不仅是一款简单直接的工具,更是一个解开字谜游戏神秘面纱的钥匙。项目介绍wordle-list,一个源自Wordle游戏源代码的随机排序单词列表,旨在帮助玩家筛选潜在的
WD5032是一款集成多个USB专用充电协议的高效、单片同步降压DC/DC转换器,32V,3.1A车充芯片,支持快速充电协议
F13729801557
DC-DC降压 单片机 嵌入式硬件 51单片机 stm32
WD5032是一款性能出色的电源管理芯片,以下是根据你提供的信息整理的详细介绍:基本特性:宽输入电压范围:能在8.5V至32V的输入电压范围内稳定工作。大电流输出:可提供高达3.1A的连续负载电流,满足多种设备的供电需求。高效率转换:转换效率高达93%,可有效减少能量损耗,提高电源利用率。控制模式:支持CC/CV(恒流/恒压)模式控制,确保充电过程的稳定性和安全性。占空比:具备100%最大占空比,
客服系统本地部署对接fastgpt 以及现有业务系统
adminwolf
个人开发
在日常的用户咨询中,许多用户会问我们的系统或浏览器插件能否直接接入Deepseek。其实,这种说法存在一定的不准确之处。正确的理解是,我们需要接入的是支持Deepseek的AI知识库平台,而非直接接入Deepseek本身,而且这些平台通常都支持多种大模型切换。下面,就为大家详细介绍相关的接入方式。我们网站:gofly.v1kf.com一、扣子智能体平台对于非技术人员来说,现在建议直接使用coze.
中国在远程医疗智能化方面有哪些特色发展模式?
争实科技
互联网医院 医疗信息化
我国在远程医疗智能化领域的发展已形成多种特色模式,结合技术创新与政策支持,有效推动了医疗资源的均衡化和服务效率提升。下面我来为大家介绍六大核心发展模式。一、县域医共体+AI辅助诊断(基层赋能模式)技术整合:基层医疗机构部署AI辅助诊断系统,通过大模型优化本地疾病图谱,为医生提供实时诊疗决策支持,年辅助诊断超20万次,电子病历规范率从7.53%提升至53.02%。资源下沉:全国70%的卫生院与上级医
《Python 微服务架构实践指南:框架与工具的深度解析》
清水白石008
python Python题库 架构 python 微服务
《Python微服务架构实践指南:框架与工具的深度解析》开篇引入背景介绍:在现代应用开发中,微服务架构因其高扩展性、灵活性和模块化优势而备受关注。从电商平台到数据处理,微服务架构逐渐取代传统单体架构,成为开发者首选。而Python凭借其简洁优雅的语法和丰富的生态系统,为实现微服务架构提供了坚实的基础。为什么写这篇文章:作为一名资深开发者和教育者,我深切感受到许多开发者在微服务设计中的困惑。因此,本
用python实现无限弹窗-五一劳动节快乐
数据知道
python3案例和总结 python 开发语言
更多内容请见:python3案例和总结-专栏介绍和目录文章目录1.使用`tkinter`实现无限弹窗1.1实现代码1.2代码说明2.使用`pyautogui`实现无限弹窗2.1安装`pyautogui`2.2实现代码2.3代码说明3.使用`ctypes`实现无限弹窗3.1实现代码3.2代码说明4.注意事项5.总结使用tkinter库使用pyautogui库在Python中实现无限弹窗可以通过tki
Eureka 为大数据领域服务治理带来的新思路
大数据洞察
大数据AI应用 大数据与AI人工智能 eureka 大数据 云原生 ai
Eureka为大数据领域服务治理带来的新思路关键词:Eureka,大数据,服务治理,分布式系统,微服务摘要:本文深入探讨了Eureka为大数据领域服务治理带来的新思路。首先介绍了大数据领域服务治理的背景和现状,阐述了Eureka的核心概念与工作原理。接着详细分析了Eureka核心算法原理,结合Python代码进行说明,并给出相关数学模型和公式。通过项目实战案例,展示了Eureka在大数据服务治理中
ASP.NET Core与Confluent.Kafka深度整合:构建高性能Kafka生产者与消费者的终极指南
墨夶
C#学习资料6 asp.net kafka linq
Kafka在现代微服务架构中的量子跃迁在2025年的分布式系统战场上,ApacheKafka已经超越了传统的消息队列角色,成为微服务架构的神经中枢。本文将通过1200+行代码和深度技术解析,揭秘如何在ASP.NETCore中使用Confluent.Kafka实现工业级的Kafka生产者与消费者。我们将从底层原理到高阶技巧,带你构建可扩展、可观察的Kafka集成方案。第一章:环境准备与核心概念1.1
java线程Thread和Runnable区别和联系
zx_code
java jvm thread 多线程 Runnable
我们都晓得java实现线程2种方式,一个是继承Thread,另一个是实现Runnable。
模拟窗口买票,第一例子继承thread,代码如下
package thread;
public class ThreadTest {
public static void main(String[] args) {
Thread1 t1 = new Thread1(
【转】JSON与XML的区别比较
丁_新
json xml
1.定义介绍
(1).XML定义
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标
c++ 实现五种基础的排序算法
CrazyMizzz
C++ c 算法
#include<iostream>
using namespace std;
//辅助函数,交换两数之值
template<class T>
void mySwap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}
const int size = 10;
//一、用直接插入排
我的软件
麦田的设计者
我的软件 音乐类 娱乐 放松
这是我写的一款app软件,耗时三个月,是一个根据央视节目开门大吉改变的,提供音调,猜歌曲名。1、手机拥有者在android手机市场下载本APP,同意权限,安装到手机上。2、游客初次进入时会有引导页面提醒用户注册。(同时软件自动播放背景音乐)。3、用户登录到主页后,会有五个模块。a、点击不胫而走,用户得到开门大吉首页部分新闻,点击进入有新闻详情。b、
linux awk命令详解
被触发
linux awk
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
[-F|-f|-v]大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=val
各种语言比较
_wy_
编程语言
Java Ruby PHP 擅长领域
oracle 中数据类型为clob的编辑
知了ing
oracle clob
public void updateKpiStatus(String kpiStatus,String taskId){
Connection dbc=null;
Statement stmt=null;
PreparedStatement ps=null;
try {
dbc = new DBConn().getNewConnection();
//stmt = db
分布式服务框架 Zookeeper -- 管理分布式环境中的数据
矮蛋蛋
zookeeper
原文地址:
http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
安装和配置详解
本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两
tomcat数据源
alafqq
tomcat
数据库
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
没有使用JNDI时我用要这样连接数据库:
03. Class.forName("com.mysql.jdbc.Driver");
04. conn
遍历的方法
百合不是茶
遍历
遍历
在java的泛
linux查看硬件信息的命令
bijian1013
linux
linux查看硬件信息的命令
一.查看CPU:
cat /proc/cpuinfo
二.查看内存:
free
三.查看硬盘:
df
linux下查看硬件信息
1、lspci 列出所有PCI 设备;
lspci - list all PCI devices:列出机器中的PCI设备(声卡、显卡、Modem、网卡、USB、主板集成设备也能
java常见的ClassNotFoundException
bijian1013
java
1.java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 添加包common-logging.jar2.java.lang.ClassNotFoundException: javax.transaction.Synchronization
【Gson五】日期对象的序列化和反序列化
bit1129
反序列化
对日期类型的数据进行序列化和反序列化时,需要考虑如下问题:
1. 序列化时,Date对象序列化的字符串日期格式如何
2. 反序列化时,把日期字符串序列化为Date对象,也需要考虑日期格式问题
3. Date A -> str -> Date B,A和B对象是否equals
默认序列化和反序列化
import com
【Spark八十六】Spark Streaming之DStream vs. InputDStream
bit1129
Stream
1. DStream的类说明文档:
/**
* A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous
* sequence of RDDs (of the same type) representing a continuous st
通过nginx获取header信息
ronin47
nginx header
1. 提取整个的Cookies内容到一个变量,然后可以在需要时引用,比如记录到日志里面,
if ( $http_cookie ~* "(.*)$") {
set $all_cookie $1;
}
变量$all_cookie就获得了cookie的值,可以用于运算了
java-65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
bylijinnan
java
参考了网上的http://blog.csdn.net/peasking_dd/article/details/6342984
写了个java版的:
public class Print_1_To_NDigit {
/**
* Q65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
* 1.使用字符串
Netty源码学习-ReplayingDecoder
bylijinnan
java netty
ReplayingDecoder是FrameDecoder的子类,不熟悉FrameDecoder的,可以先看看
http://bylijinnan.iteye.com/blog/1982618
API说,ReplayingDecoder简化了操作,比如:
FrameDecoder在decode时,需要判断数据是否接收完全:
public class IntegerH
js特殊字符过滤
cngolon
js特殊字符 js特殊字符过滤
1.js中用正则表达式 过滤特殊字符, 校验所有输入域是否含有特殊符号function stripscript(s) { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
hibernate使用sql查询
ctrain
Hibernate
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transa
linux shell脚本中切换用户执行命令方法
daizj
linux shell 命令 切换用户
经常在写shell脚本时,会碰到要以另外一个用户来执行相关命令,其方法简单记下:
1、执行单个命令:su - user -c "command"
如:下面命令是以test用户在/data目录下创建test123目录
[root@slave19 /data]# su - test -c "mkdir /data/test123" 
好的代码里只要一个 return 语句
dcj3sjt126com
return
别再这样写了:public boolean foo() { if (true) { return true; } else { return false;
Android动画效果学习
dcj3sjt126com
android
1、透明动画效果
方法一:代码实现
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_main, container, fals
linux复习笔记之bash shell (4)管道命令
eksliang
linux管道命令汇总 linux管道命令 linux常用管道命令
转载请出自出处:
http://eksliang.iteye.com/blog/2105461
bash命令执行的完毕以后,通常这个命令都会有返回结果,怎么对这个返回的结果做一些操作呢?那就得用管道命令‘|’。
上面那段话,简单说了下管道命令的作用,那什么事管道命令呢?
答:非常的经典的一句话,记住了,何为管
Android系统中自定义按键的短按、双击、长按事件
gqdy365
android
在项目中碰到这样的问题:
由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成:
1、单击事件:就是普通key的单击;
2、双击事件:500ms内同一按键单击两次;
3、长按事件:同一按键长按超过1000ms(系统中长按事件为500ms);
4、组合按键:两个以上按键同时按住;
asp.net获取站点根目录下子目录的名称
hvt
.net C# asp.net hovertree Web Forms
使用Visual Studio建立一个.aspx文件(Web Forms),例如hovertree.aspx,在页面上加入一个ListBox代码如下:
<asp:ListBox runat="server" ID="lbKeleyiFolder" />
那么在页面上显示根目录子文件夹的代码如下:
string[] m_sub
Eclipse程序员要掌握的常用快捷键
justjavac
java eclipse 快捷键 ide
判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。 曾有人在豆瓣评
《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个
程序员图书列表,目的也就是通过读书,让程序员变懒。 写道 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可
c++编程随记
lx.asymmetric
C++ 笔记
为了字体更好看,改变了格式……
&&运算符:
#include<iostream>
using namespace std;
int main(){
int a=-1,b=4,k;
k=(++a<0)&&!(b--
linux标准IO缓冲机制研究
音频数据
linux
一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.缓存I/O使用了操作系统内核缓冲区,
随想 生活
暗黑小菠萝
生活
其实账户之前就申请了,但是决定要自己更新一些东西看也是最近。从毕业到现在已经一年了。没有进步是假的,但是有多大的进步可能只有我自己知道。
毕业的时候班里12个女生,真正最后做到软件开发的只要两个包括我,PS:我不是说测试不好。当时因为考研完全放弃找工作,考研失败,我想这只是我的借口。那个时候才想到为什么大学的时候不能好好的学习技术,增强自己的实战能力,以至于后来找工作比较费劲。我
我认为POJO是一个错误的概念
windshome
java POJO 编程 J2EE 设计
这篇内容其实没有经过太多的深思熟虑,只是个人一时的感觉。从个人风格上来讲,我倾向简单质朴的设计开发理念;从方法论上,我更加倾向自顶向下的设计;从做事情的目标上来看,我追求质量优先,更愿意使用较为保守和稳妥的理念和方法。
&