最新要闻
- 新车一超过60km/h就耳朵疼 车主:找了20多个人开都如此
- Win11新版最快5月推送:微软确认Moment 3更新
- 【全球热闻】富二代开保时捷碰瓷:专挑开豪车酒驾的敲诈 “赚了”30多万
- 聚焦:五粮液董事长曾从钦:在“时与势”中勇担使命,在“稳与进”中拓展空间,在“个与众”中升级维度
- 今年1号台风“珊瑚”下周或生成 预计2023年登陆我国的台风至少6个
- 夏日必备!楠木之舟EVA拖鞋19.9元:轻盈高回弹
- 男士洗脸专属大牌 妮维雅控油、祛痘洗面奶大促:不到20
- 世界最新:ChatGPT火爆 元宇宙房产崩盘!林俊杰买虚拟地产浮亏91%
- 岚图汽车1V4 “开火”保时捷、蔚来、奥迪、极氪!结果尴尬:无一车企回应
- 环球实时:4月09日10时江苏南通疫情最新消息 4月09日10时江苏南通今日确诊人数
- 【天天播资讯】为啥国产电动车在欧洲不好卖?海外汽车大V给出5点原因
- 环球热讯:今天国际护胃日 年轻人为啥会被胃癌盯上?胃病转向胃癌有5个信号
- 全球今头条!通用自动驾驶汽车撞上公交车 300辆无人出租车被召回
- 沙尘暴蓝色预警来了:北方将迎沙尘天气!官方分享防御指南
- “码农”劳动争议频发 厘清责任依法“护体”
- 焦点快播:存碰撞风险!特斯拉美国召回422辆Model 3:前悬架连杆有隐患
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界热资讯!ASP.NET Core MVC 从入门到精通之接化发(一)
随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。
(资料图片仅供参考)
经过前一篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启动运行,以及ASP.NET Core MVC的命名约定,创建控制器,视图等内容,今天继续讲解ASP.NET Core MVC 参数接收,传递等相关内容,仅供学习分享使用。
Model模型
在ASP.NET Core MVC项目中,模型是描述用户界面上需要渲染的数据,或是这些数据的一部分。这里要区分实体和模型的概念,Entity-实体,是业务逻辑中使用的数据结构,一般与数据库中对应的表一致;模型是经过转化处理的页面可接收的数据。比如:数据库中的ID等敏感信息,bool类型,日期类型的转换等,均不适宜直接绑定Entity实体到页面,需要转换成模型进行展示。
创建模型
在ASP.NET Core MVC项目中,模型就是一个普通的类。在Models文件夹上,右键点击【添加】【类(C)...】,打开添加类对话框,如下所示:
在添加类对话框,输入名称Student,点击确定,如下所示:
注意:在ASP.NET Core MVC项目中,模型名称没有约定,符合类命名规范即可。除了标识符必须以字母或下划线 (_
) 开头。建议命名遵循以下规则:
- 【规则1-1】使用Pascal规则命名类名,即首字母要大写。
- 【规则1-2】使用能够反映类功能的名词或名词短语命名类。
- 【规则1-3】不要使用“I”、“C”、“_”等特定含义前缀。
- 【规则1-4】自定义异常类应以Exception结尾。
- 【规则1-5】文件名要能反映类的内容,最好是和类同名。
在模型Student创建成功后,添加相关属性,如下所示:
1 namespace DemoCoreMVC.Models 2 { 3 ///4 /// 学生模型 5 /// 6 public class Student 7 { 8 ///9 /// 唯一标识10 /// 11 public int Id { get; set; }12 13 ///14 /// 学生名称15 /// 16 public string Name { get; set; }17 18 ///19 /// 学生年龄20 /// 21 public int Age { get; set; }22 23 ///24 /// 学生性别25 /// 26 public string Sex { get; set; }27 }28 }
视图绑定模型
首先创建一个空视图模型【也可以创建强类型模型视图】,通过@model DemoCoreMVC.Models.Student为视图指定模型。然后即可使用模型进行数据绑定,如下所示:
1 @model DemoCoreMVC.Models.Student 2 @{ 3 4 } 5欢迎公子小六
67 学号: 8 @Model.Id 91011 姓名:12 @Model.Name131415 年龄:16 @Model.Age171819 性别:20 @Model.Sex21
控制器传递模型
在控制器中 初始化模型数据,然后通过View(model)方法将创建的模型数据传递给视图,如下所示:
1 using DemoCoreMVC.Models; 2 using Microsoft.AspNetCore.Mvc; 3 4 namespace DemoCoreMVC.Controllers 5 { 6 public class HelloController : Controller 7 { 8 public IActionResult Index() 9 {10 var student = new Student()11 {12 Id = 1,13 Name = "公子小六",14 Age = 21,15 Sex = "男"16 };17 18 return View(student);19 }20 21 public string Welcome()22 {23 return "欢迎公子小六...";24 }25 }26 }
运行测试
在Visual Studio 2022中运行程序,在浏览器输入https://localhost:7116/Hello,如下所示:
经过以上步骤,就完成了一个模型数据的流转。
接收URL参数
通过URL传参是HTTP最最常用的办法。这里简单介绍下URL相关的知识。一个URL主要分成4个部分,以https://localhost:7116/Hello/Show?name=公子小六&age=10为例:
在ASP.NET Core项目中,浏览器端通过URL往服务器端传递参数,可以通过以下几种方式获取:
1. 参数名称自动匹配法
在ASP.NET Core MVC项目中,如果Action的型参的名称跟QueryString的Key一致,则MVC框架会自动帮我们绑定参数的值,不用手动获取。可以根据参数的名称和自动匹配参数值,如下所示:
1 ///2 /// 自动匹配参数名称 3 /// 4 /// 5 /// 6 /// 7 /// 8 ///9 public IActionResult ShowStudent(int id, string name, int age, string sex)10 {11 var student = new Student()12 {13 Id = id,14 Name = name,15 Age = age,16 Sex = sex17 };18 return Json(student);19 }
在浏览器中,通过请求URL中带参数【https://localhost:7116/Hello/ShowStudent?id=23&name=公子小六&age=25&sex=男】多个参数用&符号隔开。如下所示:
注意:如果在浏览器中,中文被重新编码成如下格式:
则可以通过在Porgram.cs中注入MVC服务时修改返回JSON编码的方式来修正,如下所示:
1 // Add services to the container.2 builder.Services.AddControllersWithViews().AddJsonOptions(options =>3 {4 options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);5 });
注意:如果参数绑定的名称跟QueryString的Key不一致,可以使用FromQueryAttribute强制指定绑定的Key的名称。
2. Request.Query获取参数
在Http请求中,可以通过Request.Query["参数名称"]的方式获取参数,如下所示:
1 ///2 /// 请求参数:Request.Query 3 /// 4 ///5 public IActionResult ShowStudent2() 6 { 7 var id = Request.Query["id"]; 8 var name = Request.Query["name"]; 9 var age = Request.Query["age"];10 var sex = Request.Query["sex"];11 var student = new Student()12 {13 Id = string.IsNullOrEmpty(id) ? 0 : int.Parse(id),14 Name = name,15 Age = string.IsNullOrEmpty(age) ? 0 : int.Parse(age),16 Sex = sex17 };18 return Json(student);19 }
运行程序,在浏览器输入网址【https://localhost:7116/Hello/ShowStudent2?id=23&name=公子小六&age=25&sex=男】
3. 通过路由获取
在ASP.NET Core MVC项目中,同样可以通过路由匹配的方式获取参数,如下所示:
1 ///2 /// 通过Route匹配参数 3 /// 4 /// 5 /// 6 /// 7 /// 8 ///9 [Route("Hello/ShowStudent3/{id}/{name}/{age}/{sex}")]10 public IActionResult ShowStudent3(int id, string name, int age, string sex)11 {12 var student = new Student()13 {14 Id = id,15 Name = name,16 Age = age,17 Sex = sex18 };19 return Json(student);20 }
运行程序,在浏览器中输入【https://localhost:7116/Hello/ShowStudent3/23/公子小六/25/男】,测试效果如下所示:
注意:如果Action的型参名称跟RouteAttribute模板的中的名称不一样,那么可以使用FromRoute强制指定解析的名称。
接收Body参数
我们开发的时候经常通过表单提交数据,或者通过AJAX往后台提交一个JavaScript对象,本质上这些数据都是通过HTTP的Bady提交回去的。在ASP.NET Core MVC项目中,Request.Body是一个Stream对象,通过获取流对象中的内容,然后进行转化,就可以获取参数,如下所示:
1 [HttpPost] 2 public IActionResult TestBody() 3 { 4 Request.EnableBuffering(); 5 var body = ""; 6 var stream = Request.Body; 7 if (stream != null) 8 { 9 stream.Seek(0, SeekOrigin.Begin);10 using (var reader = new StreamReader(stream, Encoding.UTF8, true, 1024, true))11 {12 body = reader.ReadToEnd();13 }14 stream.Seek(0, SeekOrigin.Begin);15 }16 17 var student = JsonConvert.DeserializeObject(body);18 return Json(student);19 }
通过Body获取,然后JsonConvert进行反序列化,前提是Body内容是JSON格式,否则不能进行反序列化。通过Postman测试如下所示:
以上Body接收参数,主要应用于接口调用,Ajax方式请求等方式。
通过Form表单传递参数
在ASP.NET Core MVC项目中,最常用的是Form表单传递参数,客户端将所有需要传递的内容包括在Form表单内容,在服务器端Action中通过Request.Form["Key"]进行获取。如下所示:
Add.cshtml视图中Form表单内容,如下所示:
1
HelloController中Save方法,如下所示:
1 [HttpPost] 2 public IActionResult Save() 3 { 4 5 var id = Request.Form["Id"]; 6 var name = Request.Form["Name"]; 7 var age = Request.Form["Age"]; 8 var sex = Request.Form["Sex"]; 9 var student = new Student()10 {11 Id = string.IsNullOrEmpty(id) ? 0 : int.Parse(id),12 Name = name,13 Age = string.IsNullOrEmpty(age) ? 0 : int.Parse(age),14 Sex = sex15 };16 return Json(student);17 }
运行测试,在浏览器中输入网址【https://localhost:7116/Hello/add】进行测试,如下所示:
通过模型接收参数
在更多的时候,为了简便,我们通常采用模型来接收参数,如果模型的属性名和参数的Key一致,则可以自动匹配,非常方便,如下所示:
1 ///2 /// 通过模型接收参数 3 /// 4 /// 5 ///6 public IActionResult ShowStudent4(Student student) 7 { 8 return Json(student); 9 }10 11 12 [HttpPost]13 public IActionResult Save2(Student student)14 {15 return Json(student);16 }
注意:无论是Get方式,还是Post方式,均可以采用Model模型接收参数,效果和上面一致,此处不再演示。
以上就是ASP.NET Core MVC从入门到精通之接化发第一部分内容,进行会进一步讲解接化发第二部分内容。旨在抛砖引玉,温故而知新,一起学习,共同进步。
关键词:
世界热资讯!ASP.NET Core MVC 从入门到精通之接化发(一)
【全球聚看点】快速幂算法
私有化部署chatGPT,告别网络困扰
新车一超过60km/h就耳朵疼 车主:找了20多个人开都如此
Win11新版最快5月推送:微软确认Moment 3更新
【全球热闻】富二代开保时捷碰瓷:专挑开豪车酒驾的敲诈 “赚了”30多万
聚焦:五粮液董事长曾从钦:在“时与势”中勇担使命,在“稳与进”中拓展空间,在“个与众”中升级维度
今年1号台风“珊瑚”下周或生成 预计2023年登陆我国的台风至少6个
夏日必备!楠木之舟EVA拖鞋19.9元:轻盈高回弹
男士洗脸专属大牌 妮维雅控油、祛痘洗面奶大促:不到20
世界最新:ChatGPT火爆 元宇宙房产崩盘!林俊杰买虚拟地产浮亏91%
岚图汽车1V4 “开火”保时捷、蔚来、奥迪、极氪!结果尴尬:无一车企回应
环球实时:4月09日10时江苏南通疫情最新消息 4月09日10时江苏南通今日确诊人数
让民生福祉更有“数”——中国电子政务论坛聚焦数字政府建设
【天天播资讯】为啥国产电动车在欧洲不好卖?海外汽车大V给出5点原因
环球热讯:今天国际护胃日 年轻人为啥会被胃癌盯上?胃病转向胃癌有5个信号
全球今头条!通用自动驾驶汽车撞上公交车 300辆无人出租车被召回
沙尘暴蓝色预警来了:北方将迎沙尘天气!官方分享防御指南
“码农”劳动争议频发 厘清责任依法“护体”
焦点快播:存碰撞风险!特斯拉美国召回422辆Model 3:前悬架连杆有隐患
新资讯:朱晓彤 总算升职了!将在特斯拉墨西哥工厂获得一张新床
环球资讯:有人用ChatGPT月入十万了!70+款免费AI工具大搜罗
每日热门:sip消息拆包原理及组包流程
每日聚焦:超2250万台(套)各型装备投入春耕—— 农机化支撑粮食稳产增产
微头条丨小米14曝光:屏幕边框窄到没朋友 华星供货
贝克汉姆回复王濛大胆表白 感谢你的赞美:后者曾公开表示因为帅喜欢他
【天天时快讯】选台式机还是游戏本?13代酷睿旗舰处理器性能PK
环球报道:传音Tecno Camon 20 Premier曝光:天玑1200、五边形镜组
天天看点:广东白云技师学院短训班专业设置_广东白云技师学院
今日热讯:Vulnhub Bravery靶机 Walkthrough
焦点观察:69岁成龙说我还能打还能跳:是个奇迹
1999元神机诞生!Redmi Note 12 Turbo成了:用户好评率接近100%
天天快消息!Golang常用库之UUID
如何成为一名优秀的工程师?顶级程序员的5点建议
全球报道:曾称失控都是踩错单踏板!网友晒特斯拉新OTA 想要的制动恢复两档可选
全球播报:女子乘高铁把脚放前排乘客头上:狡辩称”鞋底不脏“
天天快资讯丨碱性食物有哪些_十大碱性食物排名
.Net Core Console&Generic HostBuilder
用阳光代替WiFi信号连网 沙特科学家这成果亮了
世界热点!【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(下)
世界速讯:电影《龙马精神》上映!刘德华清唱生日快乐歌祝福成龙
全球微动态丨连休5天!五一劳动节期间高速公路免费通行
口感自然 富含矿物质:依能天然苏打水2.3元(京东4元)
每日热议!博主带秤在淄博连逛10家店无缺斤少两:他很佩服
天天速递!投资者为何对苹果AR/VR设备没有信心?原因揭开
常州市天宁区人民检察院对一起拟不起诉案件公开听证
java -- 异常处理、Collection、Iterator迭代器、泛型
CentOS7-实现全网备份脚本
【天天报资讯】装机成本降了! 微星A620M-E主板到手799元:锐龙7 7800X3D绝配
关注:国宝熊猫回家记:丫丫要回来了
四川一麦田成网红打卡地:遭游客踩踏
windows提权
4799元 AOC新款27英寸电竞显示器上架:360Hz高刷、1ms响应
环球热议:没用的知识增加了!一图了解劳斯莱斯全部车型:最贵1.8亿
【天天速看料】王者荣耀镜取什么名字(王者镜的名字好听)
贵了2块钱 海底捞回应火锅小料涨价:门店自主定价
天天短讯!撤档一年半后 《超能一家人》定档7月21日:沈腾爆笑喜剧大片
时讯:科大讯飞刘聪:中国造大模型或在某些领域超越ChatGPT
世界视讯!pWnOS2
当前热文:python中shutil和shutil库的用法
Spring源码阅读系列--全局目录
今热点:郑州这些户籍室“周末无休”,周六日也能办理业务→
高校凌晨发录取通知要求半小时回复引热议 专家:不合理 好比半夜鸡叫
一口鲜气!春光0糖椰汁狂促:优惠30元到手仅需19.9
热资讯!定制纪念礼品瓷盘
MQ——消息积压如何处理
全球观点:Python 元编程
C++ 并发编程实战 第二章 线程管控
全球微速讯:gazebo小车模型(附带仿真环境)
今日快讯:哪吒纯电GT跑车遭贬低 CEO回应:就喜欢看不惯又干不掉我的样子
快资讯丨歪风盛行:日本将严惩暗拍空姐行为 违者将判处5年以下监禁或26万
999元起 中兴远航40上架:紫光展锐T760、10W快充
今日要闻!花枝招展
世界头条:浙江宁波空中突发巨响 官方回应:超高速飞行产生的音爆
当前观察:中兴Axon Pad官宣:四等宽窄边 支持一触互联
前沿资讯!百度:目前文心一言无官方App!已起诉苹果公司
世界百事通!海南航空恢复伦敦至长沙直航航线
啥事不干年薪130万:科技公司为何愿意“养闲人”?
今日最新!马斯克回应特斯拉降价:很多人有需求但买不起 只有降价才能满足需求
环球观速讯丨男子路边违停被查!司机竟掏出“联合国机动车驾驶证”
全球即时看!“云溪学子看云溪 云腾溪涌产业新”云溪区举行首届工业研学活动
环球观热点:《系列一》-- 4、xml配置文件解析之[默认]命名空间[标签]的解析
天天热推荐:面试题百日百刷-HBase中HTable API有没有线程安全问题,在程序是单例还是多例?
IPX6级防水防刮:宏碁墨尔本背包169元抄底(三种款式)
焦点快播:博主发薅高铁商务座羊毛攻略 20元享超VIP服务网友效仿:12306回应怒赞
环球快消息!平台回应机票一分钟三次变价:实时价格变动正常
英雄之光|陈旧的记录本 是他牵挂群众最温暖的见证
世界即时看!你的工资不能低于这数!31省份最低工资公布:时薪达标没
世界最资讯丨山东推出399元高铁环游套票:有效期5天、全省免费换乘
每日热议!DIY万能钥匙!主板检测灯你不得不懂
【焦点热闻】09款奥迪A4L标准型改装泪眼/导航作业
最新资讯:Docker-compose 到 Kubernetes 的迁移工具!
世界速看:全新深红配色亮相!iPhone 15 Pro超高清外观渲染图首曝:钛金属边框、Type-C接口
世界资讯:诈骗网红梅尼耶的MCN游良文化被申请破产:小刚学长等多位网红受骗
焦点速读:Java性能权威指南(第2版)读后总结与感想
动态:大学招聘体育老师 要求得过奥运冠军引热议:官方回应专业技能很重要
复星旅文2022年收入137.78亿元 徐晓亮:要尽快追回过去三年失去的业绩
【天天报资讯】K8S圣经12:SpringCloud+Jenkins+ K8s Ingress 自动化灰度发布
回顾、信号、flask-script、sqlalchemy介绍和快速使用、创建操作数据表
今日快看!ASP.NET Core MVC 从入门到精通之初窥门径