一、ASPX页面代码
1.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QualityException.aspx.cs"
Inherits="QualityException_QualityException" %>
解释:Language="C#"
--编程语言为C#
AutoEventWireup="true"
--代表是否自动关联Page_*事件方法
CodeFile="Default.aspx.cs"
--指示后台代码文件,表示该页的后置代码在当前目录下的xx.aspx.cs文件中
Inherits="_Default"
继承类, --表示页面中的控件是在哪个类中定义的
2.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
解释:以HTML格式遵循W3C标准XHTML1.0协议。
3.<head id="Head1" runat="server">
解释:aspx运行时会被编译,其中没有runat server属性的html标签会被直接写入response,有runat server属性的html标签会转换成对应的HtmlControl子类加入到页面的控件集合中,按照一个控件的生命周期进行处理,这就是"运行在服务器上"的意思。一个最直接的表现就是,当你写一个id="abc"的div,如果有runat server属性,在你的aspx.cs文件中直接可以使用abc.XXX来操作这个对象,而没有runat server的话,在cs中是没有这个对象的。以上说的是asp.net中的html控件,asp控件只能runat server,因为他们不是直接和html对应的。
4.<link rel="stylesheet" type="text/css" href="theme.css" />
解释:<link>
是设置外部文件的链接标记,用于确定本页面与其他文档之间的关系。 <rel>
是制定什么样的链接 ,<stylesheet>
是样式表的意思, <href>
文件的位置定义外联方式,整句话即引入名为 theme.css 的样式表。
<script type="text/javascript" src="../js/echarts.js"></script>
解释:这个是加载js文件,表示在该网页页面中插入了一个JS脚本文件。
5.<div style="display:none">
解释:
none 此元素不会被显示
block 此元素将显示为块级元素,此元素前后会带有换行符
inline 默认,此元素会被显示为内联元素,元素前后没有换行符
list-item 此元素会作为列表显示
<div style="style:display:none">就是在一个隐藏层里 </div>
因为display为none,所以这部分是不会显示在页面中的
二、ASPX.CS页面代码
1. C# 中异常处理
try
{
}
catch (Exception e)
{
string err = e.Message;
Console.WriteLine(err);
}
2. C# 中实例无法引用静态成员变量?
静态成员也称为共享成员,例如静态属性、静态字段、静态方法;静态成员可以在类的实例之间共享。静态类中只能有静态成员,不能有实例成员,因为静态类不能进行实例化;
在非静态类中,即可以有静态成员也可以有非静态成员。
C# 中静态成员和实例成员的区别:
静态成员需要通过static修饰,非静态成员不需要通过static修饰;
静态成员属于类,可以直接通过 " 类名.静态成员 " 的方式访问;
非静态成员,必须实例化对象后,通过 " 对象.实例 " 成员来访问。
当类第一次加载的时候(第一次被加载到内存的时候),该类下的所有的静态成员都会被加载,实例成员有多少个对象,就会创建多少个对象。静态成员会被加载到静态存储区,直到程序退出时才会被释放。
由上面显然可知,定义静态的成员是可以影响程序的执行效率的。那么什么时候定义静态的成员变量呢?
① 变量需要被共享的时候 ②方法需要被反复的调用的时候
class Program
{
static void Main(string[] args)
{
//静态成员属于类,可以直接通过“类名.静态成员”的方式访问
Person.huozhi();
//实例成员属于对象,需要通过“对象名.实例成员”来访问
Person p = new Person();
p.laodi();
}
}
class Person
{
//静态成员变量
private static int nAge;
//实例成员变量
private string strName;
public static void huozhi()
{
Console.WriteLine("老铁");
}
public void laodi()
{
Console.WriteLine("小老弟");
}
}
3.[WebMethod]
解释:带有[WebMethod]的属性的方法,在前端可以直接利用Ajax调用。
1、方法使用public static修饰,返回类型最好是string
2、方法前添加 [WebMethod] 属性
3、客户端访问时要使用Post方法,和Json作为数据形式进行交互,否则会整页HTML返回
4、在jQuery访问时,回调中的data.d才是真正的返回内容
5、访问URL为: http://abc.com/abc.aspx/GetTime ,如有个GetTime的公共静态方法
静态函数中不能用服务器控件,所以[WebMethod]方法不能使用服务器控件。
4. this.plantSelect.innerHTML
this可以省略 plantSelet是前端控件的id。
5. Ajax处理JSON的两种方式对比
根据Ajax的局部刷新请求,后台有两种处理方式,一种是建立 .ashx 文件处理每一个请求,但当请求过多时就需要建立很多的文件,不cool;另一种是使用 [WebMethod] 在当前页面的后台 .cs 文件中为每个请求建立方法来处理,这样可以只用一个页面写所有的请求,比较cool。
.cs文件
(1)后端--静态方法
[WebMethod]
public static string getPlantSelect(string plant,string model)
{
GetPlanData gpd = new GetPlanData();
DataTable dtBuilding = gpd.GetBuilding(plant);
string defaultBuild = dtBuilding.Rows[0][0].ToString();
DataTable dtFloor = gpd.GetFloor(plant, defaultBuild);
......
string responseStr = "{\"buildings\":" + JsonConvert.SerializeObject(dtLine) + "}";
return responseStr;
}
(2)前端--ajax方法
$(function () {
//更改Plant的值
$("#plants").on("click", "ul>li", function () {
var plant = $(this).text();
var model = $("#productSelect").text();
$.ajax({
type: "post",
url: "planManage.aspx/getPlantSelect",
data: "{'plant':'" + plant + "','model':'" + model + "'}",
dataType: "json",
contentType: "application/json;charset=utf-8",
success: function (result) {
var data = JSON.parse(result.d);
......
.ashx文件
(1)后端--静态方法
public class PlantSelect : IHttpHandler {
GetPlanData gpd = new GetPlanData();
public void ProcessRequest (HttpContext context) {
string plant = context.Request.Form["plant"];
......
DataTable dtOld = gpd.GetLineV4(plant, defaultBuild, defaultFloor, defaultSection);
......
string responseStr = "{\"buildings\":" + JsonConvert.SerializeObject(dtLine) + "}";
context.Response.ContentType = "text/plain";
context.Response.Write(responseStr);
}
(2)前端--ajax方法
$(function () {
//更改Plant的值
$("#plants").on("click", "ul>li", function () {
var plant = $(this).text();
var model = $("#productSelect").text();
$.ajax({
type: "post",
url: "PlantSelect.ashx",
data: { 'plant': plant, 'model': model },
success: function (result) {
var data = JSON.parse(result);
......
三、C# Project
1. IIS中解决字体样式找不到
最近项目中用到了fontawesome-webfont.svg等字体。部署项目后,发现没有<,+等符号,字体也不对,发现浏览器总是报找不到woff、woff2字体的错误。
原因:因为服务器IIS不认SVG,WOFF/WOFF2 这几个文件类型,只要在IIS上添加MIME 类型即可。
解决方案:
登录网址下载对应的文件放在自己的项目中 http://fontawesome.io/#modal-download
1. 打开服务器IIS管理器,找到MIME类型
2. 添加MIME类型 添加三条:
文件扩展名 MIME类型
.svg image/svg+xmz
.woff application/x-font-woff
.woff2 application/x-font-woff
注:本文在win7环境下IIS7版本中填写的MIME类型
2.DataTable 为空,引起报错
判断DataTable是否有数据(有数据):
if(DataTable != null && DataTable.Rows.Count > 0)
判断DataTabel是否为空表:
if(DataTable == null || DataTable.Rows.Count <= 0)
3. .aspx文件和.aspx.cs文件的一些说明
解释:
.aspx文件:(页面)书写页面代码。存储的是页面design代码。只是放各个控件的代码,处
理代码一般放在.cs文件中;
.aspx.cs文件:(代码隐藏页)书写类代码,存储的是程序代码,一般存放与数据库连接和数
据库相关的查询、更新、删除操作,还有各个按钮单击后发生的动作等。
4. ASPX页面和ASPX.CS页面加载顺序
- 先加载aspx.cs的Page_load函数
- 再加载aspx页面,aspx页面引用JS文件,调用Ajax方法
- Ajax传参到aspx.cs函数,使用连接Oracle数据库函数调用存储过程
- aspx.cs函数返回String,返回到Ajax success里,实现在前台动态刷新显示
5. 一个C#项目中 page_load、HTML和JS加载顺序
Page_Load确实在html之前先执行.html是后输出的.
-> 最通俗的说法是,aspx页属于前台,是布局页面
-> cs文件是后台,处理逻辑数据
.net的机制是这样的,先运行a.aspx.cs的Load事件,处理结束后生成部分html标签,转换到a.aspx
处理<% %>之间的代码,注意此时的.net控件,如asp:TextBox等已经转换为对应的html的
<input type='text'>,然后运行body的onload事件
asp.net页面运行周期:
1、请求到达服务器
2、服务器运行页面cs代码
3、服务器加载aspx文件,执行<% %>代码块