asp.net高级教程(四)---实战篇(上)

ASP.NET Core MVC 中 Views 的高级应用与实战详解 本文深入探讨ASP.NET Core MVC框架中Views的高级应用技术,主要包括以下核心内容:1. 视图基础:介绍Views在MVC架构中的作用、创建方法及基本结构,强调其数据展示和用户交互功能。2. 数据传递:详细解析ViewBag、ViewData和Model三种数据传递方式的特点与使用场景。3. 视图组织:讲解布局视图和分部视图的使用方法,实现页面结构复用和模块化开发。4. 表单处理:涵盖表单创建、提交和数据验证的全流程实现。5. 高级特性:重点介绍TagHelpers的灵活应用和AJAX异步交互 阅读详情
结合论坛用户操作谈asp.net表单验证(上)

有了前面的知识,现在我们要进入实战。做过asp的朋友都知道表单验证是个比较头疼的
问题,有经

验的Web程序员有这么一句话,那就是客户端不相信服务器端,服务器端不相信客户端。
什么意思呢,就

是说做表单验证时服务器端程序不能假定客户端程序是正确的而不加检测,这样如果客
户端关闭

javascript就可能造成出错,而如果只做服务器端检测,那么需要提交到服务器端再返
回,那么效率会大

打折扣,并且对于用户极不方便。所以只能客户端和服务器端做两次验证。现在asp.net
提供了新的表单

验证机制,下面我将结合实例简单讲一下,想要了解asp.net提供的几个验证webcontrol
的详细资料,可

以参照我的asp+初级教程。
在讲表单验证以前,先做点准备工作。前面谈到用asp.net开发需要转换编程思维,也就
是用面向对

象的思想去考虑问题,bbs对象我们已经构造好了,现在让我们来看一下一个论坛系统中
另外一个很重要

的对象:用户。可以说,论坛系统的主体是用户,没有用户那也就谈不上什么论坛了,
所以围绕用户的操

作很多,比如说添加/删除用户,查询/修改用户资料等等,有些论坛还有积分机制,根
据用户登录次数或

发言多少来决定积分,已表明该用户的活跃程度。那么,我们应该如何来构造论坛用户
这个对象呢?看看

下面的类定义:
namespace MyOwnClass
{
using System;
using MyOwnClass ;
using System.Data.SQL ;
using System.Web.Util ;

////////////////////////////////////////////////////////////////////
//
// Class Name : BBSUser
//
// Description: 论坛用户类,构造一个论坛用户对象
//
// date: 2000/02/03
//
/// ////////////////////////////////////////////////////////////////
public class BBSUser
{
//新建枚举类型,创建用户方式,创建还是修改
public enum CreateType
{
Create = 0 ,
Modify
}

//私有成员变量
private int m_intID ; //用户ID
private string m_strUserName ; //用户名
private string m_strPassword ; //密码
private string m_strEmail ; //用户email
private string m_strHomepage ; //个人主页
private string m_strSignature ; //签名

//属性,全部只读
public int ID
{
get
{
return m_intID ;
}
}



public string UserName
{
get
{
return m_strUserName ;
}
}

public string Password
{
get
{
return m_strPassword ;
}
}

public string Email
{
get
{
return m_strEmail ;
}
}

public string Homepage
{
get
{
return m_strHomepage ;
}
}

public string Signature
{
get
{
return m_strSignature ;
}
}
//构造函数
public BBSUser()
{
//
// TODO: Add Constructor Logic here
//
m_strUserName = "" ;
m_strPassword = "" ;
m_strEmail = "" ;
m_strHomepage = "" ;
m_strSignature = "" ;
}

//根据用户名查询用户资料
public bool GetUser(string a_strUserName)
{
//如果用户名中包含单引号则抛出一个异常
if (a_strUserName.IndexOf("'") != -1)
{
throw(new Exception("用户名包含非法字符")) ;
}

bool bExists = false ;

MyConnection myConn = new MyConnection() ;
try
{
myConn.Open() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.ActiveConnection = myConn ;
myCommand.CommandText = "select * from BBSUser where

UserName='" + a_strUserName + "'";

SQLDataReader myReader ;
myCommand.Execute(out myReader) ;

if (myReader.Read())
{
m_intID = (int)myReader["ID"] ;
m_strUserName = myReader["UserName"].ToString() ;
m_strPassword = myReader["password"].ToString() ;
m_strEmail = myReader["Email"].ToString() ;
m_strHomepage = myReader["Homepage"].ToString() ;
m_strSignature = myReader["Signature"].ToString() ;
bExists = true ;
}
else
{
bExists = false ;
}

myReader.Close() ;
myConn.Close() ;

}
catch(SQLException e) //如果出现异常
{

throw(new Exception("数据库异常:" + e.Message)) ;



}

//返回结果
return bExists ;
}

//重载,根据用户ID查找用户
public bool GetUser(int a_intUserID)
{

bool bExists = false ;

MyConnection myConn = new MyConnection() ;
try
{
myConn.Open() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.ActiveConnection = myConn ;
myCommand.CommandText = "select * from BBSUser where id=" +

a_intUserID.ToString() ;

SQLDataReader myReader ;
myCommand.Execute(out myReader) ;

if (myReader.Read())
{
m_intID = (int)myReader["ID"] ;
m_strUserName = myReader["UserName"].ToString() ;
m_strPassword = myReader["password"].ToString() ;
m_strEmail = myReader["Email"].ToString() ;
m_strHomepage = myReader["Homepage"].ToString() ;
m_strSignature = myReader["Signature"].ToString() ;
bExists = true ;
}
else
{
bExists = false ;
}

myReader.Close() ;
myConn.Close() ;

}
catch(SQLException e) //如果出现异常
{

throw(new Exception("数据库异常:" + e.Message)) ;

}

//返回结果
return bExists ;
}

//新建用户
public void CreateUser(BBSUser.CreateType a_enumCreateType ,string

a_strUserName ,
string a_strPassword ,

string a_strEmail ,
string a_strHomepage ,

string a_strSignature)
{
//监测参数有效性
if (a_strUserName.IndexOf("'") != -1 || a_strPassword.IndexOf("'")

!= -1
|| a_strEmail.IndexOf("'") != -1 ||

a_strHomepage.IndexOf("'") != -1
|| a_strSignature.IndexOf("'") != -1)
{
throw(new Exception("包含非法字符")) ;
}

try
{
MyOwnClass.MyConnection myConn = new MyConnection() ;
SQLCommand myCmd = new SQLCommand() ;

//判断是新建用户还是修改用户资料
if (a_enumCreateType == BBSUser.CreateType.Create)
{
myCmd.CommandText = "insert into BBSUser(UserName ,

Password , Email , Homepage , Signature)"
+ "values('" + a_strUserName + "','"

+ a_strPassword + "','"
+ a_strEmail + "','" + a_strHomepage

+ "','" + a_strSignature + "')" ;
}
else
{
myCmd.CommandText = "update BBSUser set Email='" +



a_strEmail
+ "' , Homepage='" + a_strHomepage + "' ,

Signature='"
+ a_strSignature + "' where username='" +

a_strUserName + "'";
}
myConn.Open() ;
myCmd.ActiveConnection = myConn ;
myCmd.ExecuteNonQuery() ;
myConn.Close() ;

}
catch(SQLException exp)
{
throw(new Exception("数据库出错:" + exp.Message)) ;
}

}

//取回密码
public void GetPassword(string a_strUserName , string a_strEmail)
{

if (GetUser(a_strUserName) && m_strEmail == a_strEmail)
{
//发送Email
System.Web.Util.MailMessage myMail = new MailMessage() ;
myMail.From = "lyp@server1.domain" ;
myMail.Subject = "取回您的密码" ;
myMail.Body = "请牢记您的密码:" + m_strPassword ;
myMail.To = a_strEmail ;
SmtpMail.Send(myMail) ;
}
else
{
throw (new Exception("该用户不存在")) ;
}
}

}
}

通过前面的学习,你可能已经能够看懂这个类定义的大部分内容,那些是成员变量,那
些是属性,那

些是方法都可以理解了,在这里需要解释的只有以下两部分内容,首先看这段代码:

public enum CreateType
{
Create = 0 ,
Modify
}
这段代码的作用是创建BBSUser类的一个枚举变量,写过c程序的朋友很容易理解,建立
这个枚举变量

的作用是简化记忆,用容易记忆的名称代替值,比如上边这个定义,当在方法CreateUse
r里作为第一个参

数时,BBSUser.CreateType.Create实际的值是0,代表这个方法的目的是创建用户,而
如果是

BBSUser.CreateType.Modify,则代表目的是修改用户资料。显而易见,用if
(a_enumCreateType ==

BBSUser.CreateType.Create)这样的语句比用if (a_intCreateTYpe == 1)更容易记忆,
最大限度减少出

错的可能。

另外一个要解释的内容是:你可能已经注意到在类的定义中有两个 GetUser方法的定义
,其作用域和

返回值都相同,只是参数类型不同。没错,这种做法叫重载(override),是并且只能是
面向对象程序语言

实现多态性的基本方法,那么这样做有什么好处呢?就是根据参数不同由类自己决定应
该调用那个正确的

方法,这样讲可能有些抽象,那么举个例子来说吧,这个GetUser方法的作用是取得用户
资料,那么它可

以通过用户名来取得资料,也可以通过用户ID来取得,如果不用函数的重载,那么我们
需要建两个函数,

可能一个叫GetUserFromName(string a_strName) , 而另一个是GetUserFormID(int
a_intID),在调用时

需要判断一下决定调用那个方法,象这样:
if ( BBSUser.ID != "")
{
GetUserFromID(BBSUser.ID) ;
}
else if(BBSUser.Name != "")
{
GetUserFromName(BBSUser.Name) ;
}



以上两种方法孰优孰劣恐怕已经不用我说了吧。
好了,既然我们已经创建好BBSUser对象,下面就可以利用它来进行对用户的操作了。
ASP.net视频教程从入门到高级+电子书 共24GB 超全面(百度云网址)) 收集了几家培训机构的教学视频 各一套 非常全面 从入门到精通 。课件+代码+视频。赠送 ASP.net ,C# 电子书 共24.12GB 立即下载

相关推荐

.net高级教程, 难得的学习资料

.net高级教程, 难得的学习资料 .net高级教程, 难得的学习资料

.NET 性能高级教程(一)

这本书已经成为,因为我们觉得没有权威的文本,涵盖所有这三个领域有关。确定性能指标,然后测量应用性能,以验证它是否满足或超过这些指标。在内存管理、网络、I/O、并发性和其他方面提高应用性能。了解 CLR 和。NET 内部细节,以便设计高性能的应用,并在出现性能问题时进行修复。我们相信。如果不彻底了解这三个方面,NET 开发人员就无法实现系统化的高性能软件解决方案。例如,。

龙哥盟 2042

ASP.NET高级编程

ASP.NET高级编程。PPT。ASP.NET高级编程,ASP.NET高级编程

asp.net高级教程(五)---实战篇(中)

做好准备工作,现在就要动真格的了,先让我们看看用户注册的实现。前边已经讲过,asp.net可以实现业务逻辑和html代码分离,那么让我们来看看到底是如何实现的,下面这个文件是用户注册的页面部分,原型是根据我站点的风格制作的:Inherits="bbs.Register" %>新用户注册function OnPreview(){divPreview.innerHTML = Form1.txtSign

★★创造未来★★ 1052

.net Framework 2.0 高级编程详细教程

.net Framework 2.0 高级编程详细教程 老师的心血来的~大家共享

Windows游戏多开检测实战:5种技术原理与破解方法详解(附C++代码)

本文深入解析了Windows游戏多开检测的5种核心技术原理,包括进程枚举、互斥体、信号量、窗口及文件映射检测,并详细探讨了对应的破解方法。通过分析这些基于进程和内核对象的攻防机制,为开发者与逆向爱好者提供了从底层理解Windows系统进程管理的实战视角,并附有核心C++代码示例。

weixin_29315091的博客 243

asp.net高级教程

asp.net高级教程(一)---asp.net , 还是asp+?  看到这个标题你可能会笑,alpha版的时候MS叫它asp+,后来出了beta1版,就改名叫asp.net了,那还不是一回事吗?你错了,这不仅仅是一个简单的叫什么的问题,而是一个它到底是什么的问题。关于asp.net到底是什么,恐怕你已经看过不少这类文章,并且有自己的理解,但恐怕大多数人的理解不是那么正确。问个简单的问题,asp

PConline(伤心太平洋) 1851

运放 + MOS管构成的恒流电路分析及实用环境器件参数选择

恒流电路

五花带点肉 2万+

.NET 性能高级教程(四)

原文:Pro .NET Performance 协议:CC BY-NC-SA 4.0 九、算法优化 一些应用的核心是为特定领域设计的专门算法,这些算法基于并不普遍适用的假设。其他应用依赖于经过充分测试的算法,这些算法适用于许多领域,并且在整个计算机软件领域已经存在了几十年。我们相信,每个软件开发人员都可以从算法研究皇冠上的宝石中受益并获得洞察力,以及软件框架所基于的算法类别。虽然如果你没有很强的数学背景,这一章的某些部分可能会有些困难,但是它们是值得你努力的。 这一章轻轻拂过计算机科学的一些支柱,并回顾

龙哥盟 1945

从网格剖分到结果外推:一文拆解HFSS快速扫频(Fast Sweep)的底层逻辑与性能调优

本文深入解析了HFSS快速扫频(Fast Sweep)技术的底层逻辑与性能调优方法。通过ALPS算法实现频带外推,快速扫频相比离散扫频和插值扫频能提升3-5倍计算效率,特别适用于天线阵列、微波滤波器等宽频带分析场景。文章详细介绍了算法架构、参数优化策略及工程实践中的精度保障机制,帮助工程师高效完成电磁仿真。

weixin_28693447的博客 93

Dataset - DeepFashion 服装数据集

Dataset - DeepFashion 服装数据集 [Dataset - DeepFashion] [Project - DeepFashion] 1. 服装类别和属性预测集 [Category - Attribute 下载] [百度网盘] 289,222 张服装图片 clothes images; 50 个服装类别 clothing categories 1,000 ...

长风破浪会有时,直挂云帆济沧海 2万+

C#9 和 .NET5 高级教程(七)

原文:Pro C# 9 with .NET 5 协议:CC BY-NC-SA 4.0 十二、委托、事件和 Lambda 表达式 到本文的这一点为止,你开发的大多数应用都将不同的代码作为顶级语句添加到了Program.cs中,这些语句以某种方式将请求发送到给定对象的。然而,许多应用要求一个对象能够使用回调机制将传递回创建它的实体。虽然回调机制可以在任何应用中使用,但它们对于图形用户界面尤其重要,因为控件(如按钮)需要在正确的情况下(单击按钮时、鼠标进入按钮表面时等)调用外部方法。). 在下面。NET 核心

龙哥盟 1361

【分享】ArcGIS实现分子分母等标注实用技巧

前言 标注是显示在地图上的文字信息,是出图中不可或缺的重要元素,为了标注的样式丰富,摆放的位置灵活,因此给制图出图带来不少难度,以下分享几种本人在ArcGIS中的标注方法,实现上下标注、换行标注或分式标注的实用技巧。 普通模式与高级模式 默认为普通模式,勾选高级开启高级模式。 普通二分式标注(普通模式) [DLBM] & vbnewline & [DLMC] 标注效果展示 分行二分式标注(普通模式) [DLBM]& vbnewline & "——————" &

杨港 3万+

asp.net高级教程(四):实战篇(上)

  结合论坛用户操作谈asp.net表单验证(上)  有了前面的知识,现在我们要进入实战。做过asp的朋友都知道表单验证是个比较头疼的问题,有经验的Web程序员有这么一句话,那就是客户端不相信服务器端,服务器端不相信客户端。  什么意思呢,就是说做表单验证时服务器端程序不能假定客户端程序是正确的而不加检测,这样如果客户端关闭javascript就可能造成出错,而如果只做服务器端检测,那么需要提交

The key to .Net 313

Zotero on Mac: 高效文献管理与引用指南

本文为Mac用户提供了一份全面的Zotero高效文献管理与引用指南。从安装配置、文献收集管理、PDF深度阅读与笔记,到在Word中无缝插入引用和生成参考文献,详细讲解了核心工作流。同时推荐了ZotFile、Better BibTeX等必备插件,并介绍了利用同步与WebDAV实现跨设备无缝衔接的方法,助力研究者构建个人数字知识库,极大提升学术研究效率。

weixin_29281941的博客 1178

Python爬虫:爬取健身平台运动数据(跑步、骑行轨迹)

通过分析这些运动数据,用户能够了解自己的运动趋势、运动成绩,并作出相应的调整。通过使用Strava的API,我们成功地获取了用户的运动活动信息和运动轨迹数据,并进行了存储与可视化。Strava的API提供了丰富的数据接口,能够通过OAuth2认证获取用户的运动数据,包括历史数据、运动轨迹等信息。Strava的API还提供了获取活动轨迹数据的接口,返回的数据格式通常是GeoJSON格式,适用于地图可视化。随着大数据技术的发展,运动数据的分析和可视化为个人健康管理、运动训练计划的优化等提供了强大的支持。

2201_76125261的博客 1076

深入浅出Asp.Net Core MVC应用开发系列-入门实战篇

ASP.NET Core MVC 教程摘要(148字) 本教程讲解ASP.NET Core MVC与Entity Framework Core整合开发,重点对比了Razor Pages与传统MVC架构。教程涵盖MVC三大组件(模型、视图、控制器)的协同机制,以及Razor视图引擎的混合编程特性。详细介绍了Entity Framework的三种模式(EFDesigner/CodeFirst/DbFirst)及核心配置方法,包括数据库上下文设置、数据模型设计规范(含数据注解和Fluent API)。特别强调了C

morliz的博客 1380

SOC、SOH、OCV

1)放电实验法的测量SOH结果最为准确,但是深度放电会对影响电池的寿命;2)电阻折算法仅将电阻作为评价SOH的依据,但电池老化时电阻的变化范围较小,因此该方法的误差较大;3)电阻折算法需要对电池进行大量的实验,绘制成Map图,但是该方法有一定的局限性,针对不同的电池需要绘制不同的Map图;4)阻抗分析法是目前最为前沿的方法,可以根据阻抗谱较为直观的分析SOH的变化,但是该方法需要的成本较高,每台设备约为5万美元。

m0_61973119的博客 2万+

ASP.NET项目开发全程实录第3版附带代码:全面的.NET教程与实践

ASP.NET项目开发全程实录第3版附带代码:全面的.NET教程与实践 【下载地址】ASP.NET项目开发全程实录第3版附带代码 《ASP.NET项目开发全程实录第3版》是一本全面系统的ASP.NET开发教程,适合.NET开发者从入门到进阶学习。本书包含基础知识、高级应用和实战项目三大部分,涵盖ASP.NET MVC、W...

gitblog_06751的博客 831

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了ASP.NET MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASP.NET MVC 框架知识。与此同时,小编也推荐一款轻量级控件Compone...

3170

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

asp.net教程下载大全

XML与ASP网站实作大全 ASP经典百例 ASP.NET 1.1专业开发 ASP.NET完全手册 ASP.NET 技术参考 ASP.netdatabase开发圣经

秋风乍起 1955

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ASP.NET 教程

摘要:本文介绍2025年最新版ASP.NET Core全栈开发教程,从环境准备到项目部署。内容涵盖.NET 9 SDK安装、项目创建方式、项目结构解析,以及EF Core数据库操作、最小API等核心技术。提供30天学习路线和优质资源推荐,包括官方文档、视频教程和实战项目。最后给出快速创建带身份验证的Web应用命令,帮助开发者快速入门ASP.NET Core 9开发。

likuolei的博客 1550

ASP.NET MVC 教程学习

1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MVC替代WebForms,产生ASP.NET MVC 的需求是什么,只有更好的理解了为什么需要MVC,出于什么目的开发的MVC 框架,用MVC 框架来弥补什么或是提升什么,才能利用其开发出最高效最满意的Web系统。   为什么会出现ASP.NET平台下的MVC框架? 说明:本文摘自InfoQ,是作者 Jonathan Allen 2007年发布的一篇的文章,首先描述了 WebForms的优

weixin_53911715的博客 1396

ASP.NET MVC 教程汇总

此篇文章为转载,原文来自jack_孟的文章https://www.cnblogs.com/mq0036/p/9008969.html,本篇主要更新了一些链接. MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,What,How三个角度整理M...

xisong的博客 636

.NET、C#和ASP.NET,ASP.NET MVC 四者之间的区别

什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运行的环境,在这个平台下可以用不同的语言进行开发,因为.NET是跨语言的一个平台。语言可以是C#,f#,j#,vb.net等等。顺便说一下sum公司的JAVA和.NET不同的一点是java是跨平台的,不跨语言的。.NET跨平台仅限于安卓系统和IOS苹果系统。 1…ne...

Fish的博客 1227
上一篇: asp.net高级教程(三)---对象
下一篇: asp.net高级教程(五)---实战篇(中)
masterall
博客等级 码龄22年 17粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值