在默认的情况下,不论是对于编辑模式还是显示模式,一个布尔类型的属性值总是以一个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预定义模板介绍)
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
Flink在物联网实时大数据处理中的最佳实践
大数据洞察
大数据AI应用 大数据与AI人工智能 flink 物联网 struts ai
Flink在物联网实时大数据处理中的最佳实践关键词:Flink、物联网、实时大数据处理、最佳实践、数据流摘要:本文围绕Flink在物联网实时大数据处理中的最佳实践展开。首先介绍了相关背景知识,接着深入浅出地解释了Flink、物联网和实时大数据处理的核心概念以及它们之间的关系。然后详细阐述了Flink处理物联网数据的核心算法原理、数学模型和公式。通过实际项目案例,展示了开发环境搭建、代码实现和解读。
OpenAI模型可解释性工具:理解AI的黑箱
AIGC应用创新大全
AI大模型与大数据技术 AI人工智能与大数据应用开发 MCP&Agent 云算力网络 人工智能 百度 ai
OpenAI模型可解释性工具:理解AI的黑箱关键词:OpenAI模型、可解释性工具、AI黑箱、模型理解、人工智能摘要:本文旨在深入探讨OpenAI模型可解释性工具,帮助大家理解AI这个“黑箱”。首先介绍了研究的背景、目的和预期读者,接着解释了核心概念,包括OpenAI模型、可解释性工具等,阐述了它们之间的关系。通过核心算法原理、数学模型和公式的讲解,让大家明白其内在机制。还给出了项目实战案例,包括
大学宿舍的改造
侬哇中意我
先做自我介绍,本人女,19岁。先自诉我的读书历程,小学是每个人都会努力奋斗的时期,为了奖状。初中时期的我处于青春叛逆期,在经历了优秀班里的抛弃之后自甘堕落,真是一入泥潭深似海。从初二开始,接触了那个时候最为流行的非主流和杀马特,把自己搞得乱七八糟的确认为这样很美,也是那个时候我也胖到了人生最大值136。当某天我拿起那张照片总会被自己吓到,真的胖到没人样,厚厚的刘海遮住了自己原来的大眼睛,原来的可爱
2024年十大返利app排行榜,全网佣金超高的返利平台推荐十款
直返APP淘宝优惠券
随着电子商务的快速发展和互联网消费的普及,越来越多的人开始关注返利软件。返利软件作为一种便捷的消费理财方式,不仅可以让用户在购物时享受到优惠折扣,还能通过返利机制获得额外的佣金。在这篇文章中,我们将为大家介绍返利软件十大排行榜以及返利佣金最高的APP。月入十万必看!都在挣钱!推荐几个月入几千到几万的靠谱副业项目!(公众号:善士思维笔记)一、直返直返的口号是“返利就用直返”,它强调没有上级赚差价,直
ChatGPT如何实现文字分类?精选案例和最佳实践
山城程序员
ChatGPT是一种预训练语言模型,通常用于生成自然语言文本。但是,在将其应用于分类任务时,它也可以表现出色。本文将介绍如何使用ChatGPT实现文本分类,并提供实践步骤和示例代码。1.数据准备在进行文本分类之前,您需要选择一个合适的数据集并对其进行清理和预处理。确保您的数据集包含带有标签的文本数据。例如,您可能拥有一些产品评论,并且需要将它们分类为积极或消极。以下是一个示例代码,演示如何加载数据
携程机票优惠券在哪里?火车票优惠券哪里领取
古楼
作为国内领先的旅行服务平台,携程为用户提供了便捷的机票、火车票、酒店预订服务。同时,用户还可以领取各种优惠券,享受更多优惠。本文将为您详细介绍如何在携程领取优惠券。一、携程优惠券种类及领取方式1.机票优惠券在携程App或网站预订机票时,可领取机票优惠券。优惠券包括满减、折扣等多种形式。领取方式如下:(1)打开携程App或网站,进入机票预订页面;(2)在预订过程中,系统会提示领取机票优惠券;(3)点
如何搭建MySQL主从同步架构:实现数据库高可用与读写分离
Cloud_Begin
adb
前言:在现代Web应用中,数据库往往是性能瓶颈所在。MySQL主从复制(Master-SlaveReplication)是一种常见的数据同步方案,它不仅能提高系统的读取性能,还能增强数据安全性并提供故障转移能力。本文将详细介绍如何从零开始搭建一个MySQL主从同步架构。一、主从复制原理简介MySQL主从复制基于二进制日志(binlog)实现,其核心流程如下:主库(Master)将所有数据更改操作记
Scrum —— 一个真实的敏捷开发案例
曹元_
Scrum为项目执行提供了可靠的、已被证实的基础。但是,在每个项目中,Scrum都必须根据具体需求和环境进行调整,这是项目成败的决定性因素。在这篇文章中,将会介绍如何成功地完成了一个大型的(20人年,超过十万行代码)、分布式(开发人员位于印度和荷兰)Scrum项目,而这个项目曾经在传统开发方式下被废弃过。为了帮助读者顺利运作大规模项目,在这里我也会历数我们的经验教训,包括:项目启动、找到合适的产品
WebRTC_iOS: 革新的 iOS 实时音视频通信解决方案
潘俭渝Erik
WebRTC_iOS:革新的iOS实时音视频通信解决方案去发现同类优质开源项目:https://gitcode.com/1、项目介绍在当今的移动应用世界中,实时通信能力已经成为许多应用程序的核心竞争力。WebRTC_iOS是一个专为iOS设备设计的开源项目,它利用了Google的WebRTC技术,为您提供了一套完整的音视频通信框架。这个项目的目标是简化开发者在iOS应用中集成高质量、低延迟的音视频
蜂享店佣金计算及制度模式
氧惠全网优惠
蜂享店佣金计算及制度模式蜂享店的佣金计算及制度模式主要围绕其多级代理商架构展开,旨在通过激励代理发展下线代理和提升销售业绩来实现佣金的持续增长。以下是具体的佣金计算方式和制度模式,同时向您介绍另一个赚钱利器:氧惠App。通过使用官方邀请码,您可以享受到更高的佣金回报。请继续阅读,开启创收的新征程!佣金计算方式基础佣金:实习掌柜(最基础级别)通过自购或销售商品,可以获得商品页面显示的佣金的100%。
Kotlin介绍
江上清风山间明月
Android kotlin 开发语言 android
文章目录1.Kotlin是什么?(身份介绍)2.Kotlin为什么受欢迎?(核心魅力-四大亮点)3.Kotlin看起来什么样?(一瞥语法)4.学习Kotlin能做什么?(应用场景)5.给0基础学习者的建议总结一下Kotlin给你的印象1.Kotlin是什么?(身份介绍)一句话定义:Kotlin是一种现代的、简洁的、安全的、实用的编程语言。谁创造的?一家叫JetBrains的公司(他们做了很多程序员
ActiveMQ、RabbitMQ、RocketMQ、Kafka四种消息中间件分析介绍
马小屑
Kafka kafka
ActiveMQ、RabbitMQ、RocketMQ、Kafka四种消息中间件分析介绍我们从四种消息中间件的介绍到基本使用,以及高可用,消息重复性,消息丢失,消息顺序性能方面进行分析介绍!一、消息中间件的使用场景消息中间件的使用场景总结就是六个字:解耦、异步、削峰1.解耦如果我方系统A要与三方B系统进行数据对接,推送系统人员信息,通常我们会使用接口开发来进行。但是如果运维期间B系统进行了调整,或者
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 设计
这篇内容其实没有经过太多的深思熟虑,只是个人一时的感觉。从个人风格上来讲,我倾向简单质朴的设计开发理念;从方法论上,我更加倾向自顶向下的设计;从做事情的目标上来看,我追求质量优先,更愿意使用较为保守和稳妥的理念和方法。
&