asp.net;与mvc都是不可替代的;只是多一种选择;(解决了许多asp.net的许多缺点)

model:充血模型。领域模型;很大程度的封装;

控制器:处理用户的交互,处理业务逻辑的调用,指定具体的视图来展示数据;

mvc:其实就是前台和后台松耦合;不是集成关系了,相当于回归;到<% for(var i in list) {%>;

实现了后台不干预前台业务逻辑;

控制器:必须以Controller结尾;所有方法都成为acion,就是一个请求;必须实现

必要三点:实现icontroller接口,不能静态;ation,(Controller结尾)

每个控制器都对应自己的文件夹;

控制器指定视图来展示数据,如果没有指定名字,就用当前action名字座位veiw的名字;(约定)

到指定路径下面的搜索相应的aspx页面,如果自己控制器视图文件夹,里面没有去shared黎明去搜索

aspx,打断点:选中按f9,或是在冒号后面错行;,点击边缘设置断点;

约定大于配置;struct.spring都需要配置;

application_start:一般配置静态变量,只执行一次;除非appdomin卸载;

mvc请求的是控制器的路由的action;

webform请求的是页面;

url:地址是不区分大小写的;

aspx;就是现实数据的模板;跟请求没关系;

webform所有的请求都归到了aspx;页面上;

mvc都放到了控制器上;

请求;

<form action="/Home/My2" method="get" enctype="application/x-www-form-urlencoded">

小人:<input name="ina" type="text" />

大人:<input name="inb" type="text" />

<input value="tijiao" type="submit" />

</form>

方法中;   string s = Request["ina"];

return Content(s);//便可以输出;

--------------------------------------------

----------------------------------------------第三天(2013-3-27)

<a href="/user/index">跳转</a>

<a href='<%: Url.Action("Index","User") %>'>第二种跳转</a>//不受限制;

<%: Html.ActionLink("第三中跳转","Index","User") %>

mvc非常接近原生态的html,倒退到最初版本;没有viewstate;

<%: Html.ActionLink("第三中跳转", "Index", "User", new {id="aa",Style="Color:Yellow", @class="gg"})%>

<%: Html.ActionLink("第三中跳转", "Index", "User", new {name="guozefeng"}, new { id = "aa", Style = "Color:Yellow", @class = "gg" })%>

rotevalue传值;

<input value="提交" type="submit" />

<a href="/user/index">跳转</a><br/>

<a href='<%: Url.Action("Index","User") %>'>第二种跳转</a><br />

<%: Html.ActionLink("第三中跳转", "Index", "User",new  {name="guozefeng"}, new{ id = "aa", Style = "Color:Yellow", @class = "gg" })%>

<%: Html.TextBox("aa","bb",new {})%>

<br />

男:<%: Html.RadioButton("name1",1,true) %>

女:<%: Html.RadioButton("name1",2,false) %>

<br />

<%: Html.DropDownList("guo")%>

<br />

<%: Html.TextBox("txt1") %>

--------------------------------------------第四天:

扩展方法三要素:

静态类,静态方法,this参数;(作用能够点出来)eg:  public static string GetLable(this HtmlHelper helper, string text)

using System.Web.Mvc;(htmlhelper)

引入命名空间:<%@ import Namespace="MvcApplication1.Models" %>

自定义htmlhelper类;

public static MvcHtmlString GetLableByMVC(this HtmlHelper helper, string text)

{

//return ;

return MvcHtmlString.Create(string.Format("<span>{0}</span>", text));

}(或者返回类型是htmlstring)

-----------------------

helper类好处:规范化,只要改源码,全都改;

异步:

function Button1_onclick() {

$.ajax({

url: "/Ajax/ShowTime",

contentType: "application/json;charset=utf-8",

data: "{}",

type: "POST",

success: function (result) {

alert(result);

},

error: function (error) { alert(error); }

});

}

----微软异步:

(1)先添加两条js;

(2)showok为函数名称;(适用于含有数多表单控件时候)

<% using(Ajax.BeginForm("ShowTime",new AjaxOptions()

{

Confirm="是否要提交啊?",HttpMethod="Post",UpdateTargetId="resultDiv",

InsertionMode= InsertionMode.InsertBefore,

OnSuccess="showOk" ,

LoadingElementId="loading"

}) )

{

%>

<input type="submit" value="提交"/>

<% } %>

-------------$.post的用法;

$("#btnAdd").click(function () {

//封装参数

var param = {

BranchName: $("#txtBranchName").val(),

Remark: $("#txtRemark").val()

};

//发送异步请求

$.post("AddBranch.ashx", param, function (data) {

if (data == "ok") {

$("#showAddDialogDiv").dialog("close"); //关闭弹出来的添加的对话框

//刷新表格

initTableList("");

//ruby on rails

}

});

});

-----------$.getjson用法

$.getJSON("LoadAllBranch.ashx", queryParam, function (data) {

-----------------删除异步:这两种方式都行;

$(".delLink").click(function () {

//                if (confirm("您确定要删除吗是?")) {

//                    var iid = $(this).attr("hid");

//                    var link = $(this);

//                    $.post("/AjaxPaging/Delete","id="+iid, function (data) {

//                        if (data == "true") {

//                            //  删除成功!

//                            link.parent().parent().fadeOut(1000); //指的是tr;a-td-tr;

//                        }

//                        else {

//                            alert("删除失败!");

//                        }

//                    });

//                }

//                return false;

//            });

$(".delLink").click(function () {

if (confirm("您确定要删除吗是?")) {

var iid = $(this).attr("hid");

var link = $(this);

$.ajax({

url: "/AjaxPaging/Delete",

data:"id="+iid,

type: "post",

success: function (data) {

if (data == "true") {

//  删除成功!

link.parent().parent().fadeOut(1000); //指的是tr;a-td-tr;

}

else {

alert("删除失败!");

}

}

});

}

return false;

});

----------------------------$.post();//{id:1}和"id=1"这两种方式都行;可以自动装配到model为参数的函数,如果参数不对也没事;顶多不添加;参数不区分大小写;

--------------

-----------------juery校验:

$(function () {

$("#from1").validate({

rules: {

txtName: {

required: true,

rangelength: [1, 6]

},

txtPwd: {

required: true,

digits: true,

rangelength:[1,3]

}

},

messages: {

txtName: "必填项",

txtPwd: "必须位数字"

}

});

});

-----

.error

{

color:Red;

}

--------------隐式js的好处:

1.是页面与js完全的分离;及时页面没有标签页不会报错,自己手写的会报错,出去js的话,页面也不会受影响;

----------实体引用;using System.ComponentModel.DataAnnotations;

[Required( ErrorMessage="你大爷的必填啊")]

public string Name { get; set; }

[Required( ErrorMessage="你大爷必填")]

[ RegularExpression(@"^\d+$",ErrorMessage="必须为整数")]

public int Age { get; set; }

---------mvc2中引用:

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>

<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>

<% Html.EnableClientValidation(); %>

----------实体四种验证:

[Required( ErrorMessage="你大爷的必填啊")]

public string Name { get; set; }

[Required( ErrorMessage="你大爷必填")]

[RegularExpression(@"^\d+$",ErrorMessage="必须为整数")]

[Range()]

[StringLength()]

public int Age { get; set; }

---------

if (ModelState.IsValid)

{

//校验成功

}

--------------自定义实体类:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.ComponentModel.DataAnnotations;

namespace MVC3_3.Models

{

//之所以这样干是因为防止实体更新冲掉标识;

[MetadataType(typeof(UserValidate))]//告诉编译器此类共享UserValidate的元数据;

public partial class User

{

}

public class UserValidate

{

[Required(ErrorMessage="大哥,你得填个数啊")]

public string Name { get; set; }

}

}//这样做就可以了;

------------------------路由规则:

首先,一个url请求通过路由器中的路由规则进行匹配,成功之后开始根据路由规则进行解析,并匹配相应的路由器和action;

route:包含路由规,和路由Handler(职责:获取并处理httphandler请求)

routedata:路由数据;

routecollection:路由规则集合对象;

routeTable:路由表;

路由从上至下:是有顺序;

--------指定路由约束和路由命名空间(提高了效率)

routes.MapRoute(

"Default1", // Route name

"{controller}-{action}/{id}", // URL with parameters

new { controller = "Val", action = "Index", id = UrlParameter.Optional } // Parameter defaults

, new { controller = @"^\d+$" }, new string[] { " MVC3_3.Controllers" }

-----切记路由规则很关键,是有顺序的一旦前面匹配上,后面就不能匹配了;

-----路由调试:

添加引用,在start函数中写上;RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);即可;

-------------------

-------------------

-----------aop:面向切面编程;

using System.Runtime.Remoting.Messaging;

public class MyFilter:ActionFilterAttribute(重写里面的方法);类名:MyFilter

[MyFilter]

public ActionResult Index()//过滤器;

放到类上;所有都过滤,但遵循就近原则,只执行方法上的;

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = true)]

打在自定义的过滤器上;就可以执行所有的过滤器,而不是只执行就近原则了

(需要注意的是执行顺序U形状,global->controller->action->action->controler-global)

---------------模板页:

@{

ViewBag.Title = "MuBanye1";

Layout = "~/Views/AOP/MuBanye.cshtml";

}

----

@RenderBody();

@RenderSection("aa");(模板页)

@section aa

{

sffnfsnfffsfsnosfsffferrrrrrrrrrrr

}(子页面)

-----------------

-------附加进程调试:

避免重新生成,可以在主网站运行的情况下运行;避免因项目很大调试需要很长时间,可以附加进程的方式

-------------------

----有一种解决方案:

我们将所有的sql语句放到缓存队列中去,然后在开启一个线程定时去队列中取出定量去交个sql批量执行,主要减少

与sql的交互次数,提高数据库的吞吐率;

----------savechanges之所以放入业务层,是因为可以同时执行多条后只调用一次savechanges;

----------------------------

商品的sku:一个商品有多个属性组合,每个组合对应一个价位;

--------------------------

--------------------------

spring.Net+aspnetMVC+NHibernate;-->spring.Net;

IOC:inversion of control:控制反转;

本来是对象A可以自己内部new一个B,控制反转就是有一大的容器来控制产生各种实例;类似于

大的工厂;

DI:Dependency Injection:

比如说bll层依赖dal,当bll实例后,所以来的对象会

包含bll的实例,通过参数构造函数或属性注入;就

不用外部去实例其依赖的项;

---------------控制反转:

(1)添加引用;

(2)

<configuration>

<configSections>

<sectionGroup name="spring">

<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>

<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />

</sectionGroup>

</configSections>

<spring>

<context>

<resource uri="config://spring/objects"/>

</context>

<objects xmlns="http://www.springframework.net">

<object name="User" type="控制反转IOC.User, 控制反转IOC">

</object>

</objects>

</spring>

</configuration>

(3)创建上下文

IApplicationContext ac = ContextRegistry.GetContext();

if (ac != null)

{

User u = ac.GetObject("User") as User;

MessageBox.Show(u.ShowMessage());

}

else

{

MessageBox.Show("Error");

}

(4配置注入),属性注入;

<object name="User" type="控制反转IOC.User, 控制反转IOC">

<property name="Name" value="郭泽峰呢个">

</property>

</object>

------------------------object放到xml文件中:

(1)复制objects节点到xml文件中;

(2)添加引用:-----------//项目名称//程序集名称(命名空间)/文件路径;

<resource uri="assembly://控制反转IOC/控制反转IOC/Obj.xml"/>

(3)设置xml文件,属性,始终复制;嵌入资源;

--------------构造函数注入:

<object name="Order1" type="控制反转IOC.Order1, 控制反转IOC">

<constructor-arg index="0" value="郭泽峰"></constructor-arg>

<constructor-arg index="1" value="2"></constructor-arg>

</object>

----index=0:指的是第一个参数;

----总结:控制反转:通过容器来给我们创建实例;

依赖注入:通过配置来告诉容器属性初始化付什么值;

-------------------------------面向切面编程:aop;(aspect oritented programme)

就是在执行操作之前干点事,执行之后干点事;

--------------------

<objects xmlns="http://www.springframework.net">

<!--通知注入到容器里(通知类)-->

<object name="aopAdvice" type="控制反转IOC.aopAdvice, 控制反转IOC">

</object>

<!--后台获取iop的名称;-->

<object id="aopdiali" type="Spring.Aop.Framework.ProxyFactoryObject">

<!--目标函数,最终要调用的方法-->

<property name="Target">

<object id="aopTarget" type="控制反转IOC.aop, 控制反转IOC"/>

</property>

<!--告诉将目标方法装配到注入到容器的通知类中去-->

<property name="InterceptorNames">

<list>

<value>aopAdvice</value>

</list>

</property>

</object>

</objects>

-----------

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using AopAlliance.Intercept;

using System.Windows.Forms;

namespace 控制反转IOC

{

public class aopAdvice:IMethodInterceptor

{

#region IMethodInterceptor 成员

public object Invoke(IMethodInvocation invocation)

{

MessageBox.Show("调用之前");

object result = invocation.Proceed();

MessageBox.Show("调用后:" + result.ToString());

return result;

}

#endregion

}

}

:这就和mvc过滤器一样;

------------------------

orm(对象关系映射:object relation mapping):所有实现orm的框架,都是实现了一个统一的入口,开发人员通过这一个统一的入口对表实体进行操作,然后orm框架会自动帮我们监控实体状态的编译后,然后根据失调的状态生成相应的sql脚本,然后调用底层的ado.net执行到数据库库里面去影响表的变化;

---------nhiberate;nb

sessionFactory是针对一个数据库的;

sessionFactory进程内部实例唯一;所有线程共享此实例;

要使用单例模式来初始化sessionFactory;

--------------------------------------拾楼:

catch

{

ModelState.AddModelError("Name","错误");

return View(role);

}

-------------------

alert($(window).width());窗口的宽度;

---

var obj = new Object();

//            obj.Name = "郭泽峰";

//            obj.Age = 32;

////            alert(obj.Name);

var obj ={ Name: "郭泽峰123", Age: 32 };

alert(obj.Name);

--c#

var a=new {};

------------------------过滤器:

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = true)]

public class MyFilter:ActionFilterAttribute

{

public override void OnActionExecuting(ActionExecutingContext filterContext)

{

base.OnActionExecuting(filterContext);

filterContext.HttpContext.Response.Write("我是你大爷的:执行action之前");

}

public override void OnActionExecuted(ActionExecutedContext filterContext)

{

base.OnActionExecuted(filterContext);

filterContext.HttpContext.Response.Write("我是你大爷的:执行action之后");

}

public override void OnResultExecuting(ResultExecutingContext filterContext)

{

base.OnResultExecuting(filterContext);

filterContext.HttpContext.Response.Write("我是你大爷的:返回结果(渲染画面之前)");

}

public override void OnResultExecuted(ResultExecutedContext filterContext)

{

base.OnResultExecuted(filterContext);

filterContext.HttpContext.Response.Write("我是你大爷的:渲染画面之后");

}

}

------------------错误处理

public class MyErrorFilter:HandleErrorAttribute

{

//发生错误时处理

public override void OnException(ExceptionContext filterContext)

{

base.OnException(filterContext);

//写到日志中去;

//跳转到错误页上;

filterContext.HttpContext.Response.Redirect("/Error.htm");

}

}

-------------------性能优化解决方案:

两台IIs服务器+两台数据库;

(11s共享一个session);主数据库只进行增删改,并同步到从数据库;而读只从从数据库读取;极大提高效率;

---s锁共享锁,(读);x锁:排他锁:只有当前表没有锁时才能加上排他锁;

所以提高数据库性能可以在锁方面下点功夫;

当并发率高时,容易出钱死锁;

优化:对表的操作尽量顺序一致;这样减少死锁;

1,2,3

3,2要改成2,3比如做表关联时;

优化:当数据查询比较慢时:解决方案;

当并发量较多时:解决方案:1主库(做操做),多从库(做查询);数据库集群;减少死锁;

还可以将数据库分成文件组,放在多个磁盘上,利用多个磁头同时读数据速度加快;

select * from table with(nolock)//当有事务更改未提交时,加上with (nolock);可以读取数据,但是会是脏数据(读到的是未提交数据);当事务回滚,数据恢复了;虽然可以提高查询效率,但会产生脏读;如果去掉with(nolock);就必须等待事务提交后才能查询;

-----主库如何同步到从库?

启用代理-->在复制--》发布订阅(主),选择表(列)---每隔多长时间发布一次;(这种方式可以做备份,主库挂了,从库不上)

--------------(Request.Form.AllKeys,获取所有的name键值)

string str1 = "";

var names = from key in Request.Form.AllKeys

where key.Contains("a_")

select key;

foreach (var str in names)

{

str1 += str;

}

ViewData["guo"] = str1;

ViewBag.aa = str1;

return View();

-------------------------------可以填充模板页的底部:

<div style="background-color:Yellow; width:300px; height:200px;">

@RenderSection("gg");

</div>

子页面:

@section gg

{

<h1>你大爷的</h1>

}

这样gg的内容会填充过去;

--------aa可以随便起名字;

<span>@ViewBag.aa</span>

------------

------------RenderAction("/Home/index");相当于用户控件;打对应的indexview填充过来;

---------过滤器:也是actionFilter;他继承他;

------------------------视图状态错误:

public actionResult Index()

{

modelstate m=new modelstate();

m.errors.add("出错了");

modelstate["Name"]=m;

return view();

}

asp.net MVC2.0学习笔记的更多相关文章

  1. ASP.NET MVC2.0学习笔记:路由设置

    Route设置 在 <Professional in ASP.NET MVC2.0>一书的第四章,主要讲述了Route的简单设置.格式化设置.约束设置.区域路由.匹配文件.路由调试以及对R ...

  2. asp.net core2.0学习笔记

    一.Core 1,防止过度发布 2,Main 3,Startup 4,添加过滤器 5,依赖注入 6,中间件 7,静态文件 8,路由 9,环境 10,配置和选项 11,日志 12,使用Sesstion ...

  3. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  4. Asp.Net Core WebApi学习笔记(四)-- Middleware

    Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...

  5. ASP.NET MVC2.0 自定义filters

    今天大家共同学习下ASP.NET MVC2.0中自定义filters,这一节主要学习下ActionFilterAttribute, ActionFilterAttribute继承IActionFilt ...

  6. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  7. Asp.Net MVC2.0 Url 路由入门---实例篇 【转】

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  8. ASP.NET Core 2 学习笔记(十三)Swagger

    Swagger也算是行之有年的API文件生成器,只要在API上使用C#的<summary />文件注解标签,就可以产生精美的线上文件,并且对RESTful API有良好的支持.不仅支持生成 ...

  9. ASP.NET Core 2 学习笔记(十二)REST-Like API

    Restful几乎已算是API设计的标准,通过HTTP Method区分新增(Create).查询(Read).修改(Update)和删除(Delete),简称CRUD四种数据存取方式,简约又直接的风 ...

随机推荐

  1. System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    原文 System.BadImageFormatException: 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) 用C#调用DLL文件,运行后报错如下: Syste ...

  2. IIS ASP.NET 版本转换批处理代码

    原文 IIS ASP.NET 版本转换批处理代码 用来转换asp.net版本的代码,需要的朋友可以参考下. 标识符的查看方法:iisaspnet.bat代码 复制代码代码如下: @echo off e ...

  3. windows server 2008见安装IIS方法(解决)

    windows server 2008见安装IIS方法(解决) 刚开始有点蒙,后来才知道原来如此.! . 右键点击[我的电脑]--[管理]--[字符]--[加入角色]--仅落后win7像.啊! 版权声 ...

  4. springmvc集成Ueditor插件实现图片上传2、

    一.下载Ueditor插件. 地址:http://ueditor.baidu.com/website/download.html 二.环境搭建. 具体可以参看http://fex.baidu.com/ ...

  5. Blocks and Variables

    Blocks and Variables https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Blocks/A ...

  6. c#有关udp可靠传输(包传输数据包) 升级

    在c#有关udp可靠传输(包传输数据包)我们讨论,UDP包的发送,可是上一个程序有一个问题.就是数据比較大.一个Message类序列化后都有2048B,而实际的数据量也就只是 50B罢了,这就说明当中 ...

  7. JavaScript中的try...catch和异常处理

    在JavaScript可以使用try...catch来进行异常处理.例如: try { foo.bar();} catch (e) { alert(e.name + ": " + ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

  9. linux_Ubuntu 12.04 安装jdk

    1.下载jdk6jdk6下载地址为:http://download.java.net/jdk6/,根据操作系统的选择对应的安装包,我的是ubuntu 12.04 32bit的,所以下载的文件是jdk- ...

  10. PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

    原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程序--> <!DOCTYPE html> <html&g ...