当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪Asp.Net MVC + Spring.Net + NHibernate综合应用(一)      引子MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟。使开发也变得简洁人性化艺术化,,最近项目需要改用asp.net MVC技术来开发,在开发过程.........
    ▪WCF学习系列(3)————承载      承载,承载。这词听起来挺陌生……在WCF里面官方有三种承载方式:1:IIS中承载2:在Windows进程激活服务(WAS)中承载3:在托管应用程序中承载(也就是传说中的自承载)一个个来介绍,在.........
    ▪EF Code First 学习笔记:约定配置      要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就是Fluent API,通过新增相应的配置类来覆盖默认配置。.........

[1]Asp.Net MVC + Spring.Net + NHibernate综合应用(一)
    来源:    发布时间: 2013-10-28

引子

MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟。使开发也变得简洁人性化艺术化,,最近项目需要改用asp.net MVC技术来开发,在开发过程中随既写出本人对mvc的学习心得,希望高手赐教。

搭建系统开发环境

在官网上下载ASP.NET MVC安装文件, 一路回车完成安装. 启动VS2010

                       

工程名称为“SpringMvcApplication1”点击OK进入下一步,

 

MVC3提供了两种视图引擎,分别为:ASPX和Razor,关于MVC视图引擎方面的知道我以后再谈,现在我选择Razor视图引擎(MVC开发建议选择)。

MVC3提供两种开发模板,分别为:Empty和InternetApplication

       Empty:系统只负责创建系统必须空目录结构,代码自己填。

InternetApplication:系统创建系统必须目录结构的同时,还创建一些实例代码,和一个名称叫SpringMvcApplication1.Tests的测试工程。

我选择InternetApplication。单击OK

 

启动程序,尝尝鲜

运行项目, 一个ASP.NET MVC的项目已经运行在我的电脑

 

呵呵!现在一个完成的MVC3程序就创建完毕了,而且那个Home和About还能点击! 看着能运行的实例, 心里就踏实多了!

MVC运行原理

看到程序成功运行了,下面就要了解MVC3的原理了,所为知已知彼百战不殆。

Model就是获取的网页需要展示的数据模型,

Controller是控制视图的控制器

View 是具体的视图

MVC处理Http请求的过程:

 

一个URL请求, ASP.NET MVC引擎会分析这个URL要使用那个Controller, 这个Controller(实际上真正的方法是Controller的Action)从数据库或者其他数据源获取数据,通常这些数据是一个业务的模型类(即MVC中的Model). Controller将Model对象传递给页面(即MVC中的View), 页面显示在浏览器上.

MVC实例代码分析

  • 程序默认起始页
  • 首页网站的地址应该是http://localhost:3693/ (3693是端口号,随机生成,所以会不同), 为什么地址不是具体的页面但是最后却将请求提交给了view/home/Index.cshtml页面? 很明显是使用了URL重写. ASP.NET中叫做UrlRouting,对应的程序集是System.Web.Routing, 打开项目的Global.asax.cs文件, 会找到我们建立的页面重写规则:

    Global.asax

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
    filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

    }

    protected void Application_Start()
    {
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
    }
    }

    关于Routing的深入了解将在以后介绍,先看代码"{controller}/{action}/{id}", /是MVC框架中URL请求规则,new { controller = "Home", action = "Index", id = UrlParameter.Optional }为设定当前起始处理Controller为Home中的Index方法(Action)来响应请求。

    HomeController.cs

    public class HomeController : Controller
    {
    public ActionResult Index()
    {
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
    }

    public ActionResult About()
    {
    return View();
    }
    }

     

    在Controllers文件夹下我们可以找到HomeController.cs, 这里使用了一个约定, 就是如果URL中获取到的Controller名字是Home, 则他的Controller类名就是HomeController. 在URL中的名字后加上”Controller”.

    实例中Controller都放在Controllers文件夹, 所以我们可以按照命名约定很容易就可以找到HomeController类.

    其中的Index和About都是Action.这个Action是个什么东东呢?目前我只知道一个Controller可以包含多个Action, MVC模式中Controller角色的具体实现逻辑都是在Action中的.

    因为我们的Action是Index, 所以自然就要调用Index()方法.这里将"Webcome to ASP.NET MVC!", 这里的Model角色就是这句话, 也就是一个字符串对象.

    Controller的一个重要作用就是将Model对象传递给View,也就是具体的页面. 传递的方法就是将这个字符串放到ViewBag.Message这个对象中, 然后在页面上也调用这个对象获取数据. 这个ViewBag对象一定是动态的, 或者至少是和HttpContext对象关联的, 否则到了View页面上是不能够调用的.

    Index.cshtml

    @{
    ViewBag.Title = "Home Page";
    }

    <h2>@ViewBag.Message</h2>
    <p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>

    接下Razor引擎会将页面中的HTML部分以及上面的数据部分和在一起返回给浏览器.

    结语

    虽然仅仅是第一篇入门文章, 但是不是觉得已经会用ASP.NET MVC了? 虽然学习不可以骄傲, 但是可以自豪的是ASP.NET MVC我已经不再陌生,在后续文章中,我将对MVC的各种细节,以及和Spring.net,Nhibernte结合使用具体的讲解.希望大家喜欢本系列文章!


        
    [2]WCF学习系列(3)————承载
        来源:    发布时间: 2013-10-28

    承载,承载。这词听起来挺陌生……

    在WCF里面官方有三种承载方式:

    1:IIS中承载

    2:在Windows进程激活服务(WAS)中承载

    3:在托管应用程序中承载(也就是传说中的自承载)

    一个个来介绍,在IIS中承载跟我们部署普通的ASP.NET和Web Service程序类似,在IIS中建立应用程序,把我们WCF文件拷贝到相应目录就好。在IIS中承载WCF服务,IIS7.0版本只能限于HTTP通信。相应的条件我们先激活WCF HTTP组建,在Win 7 中,打开控制面板,打开或关闭Windows功能.如图

    如果我们用生成客户端代码类形式调用WCF服务,需要用到SvcUtil.exe工具。

    下面我们看例子。一般来说我们如果新建项目的时候。新建的是WCF服务项目,那么他本身就寄托在IIS上,我们配置好配置文件就可以在浏览器中浏览我们的WCF服务了。这次我们是通过IIS来承载我们服务。首先新建一般的WCF服务项目,他本身生成的代码我们稍作修改。

    [ServiceContract]
    public interface IService1
    {

    [OperationContract]
    string GetData(int value);

    }
    public class Service1 : IService1
    {
    public string GetData(int value)
    {
    return string.Format("IIS: 承载{0}", value);
    }

    }

    配置文件改成

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <configuration>
    3
    4 <system.web>
    5 <compilation debug="true" targetFramework="4.0" />
    6 </system.web>
    7 <system.serviceModel>
    8 <services>
    9 <service name="WcfIISChengzai.Service1" behaviorConfiguration="WcfIISChengzaiBehavior">
    10 <endpoint address="" binding="wsHttpBinding" contract="WcfIISChengzai.IService1" />
    11
    12 </service>
    13 </services>
    14 <behaviors>
    15 <serviceBehaviors>
    16 <behavior name="WcfIISChengzaiBehavior">
    17 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
    18 <serviceMetadata httpGetEnabled="true"/>
    19 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
    20 <serviceDebug includeExceptionDetailInFaults="false"/>
    21 </behavior>
    22 </serviceBehaviors>
    23 </behaviors>
    24 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    25 </system.serviceModel>
    26 <system.webServer>
    27 <modules runAllManagedModulesForAllRequests="true"/>
    28 </system.webServer>
    29
    30 </configuration>

    然后我们像在IIS中部署普通asp.net web程序一样部署我们的IIS。添加应用程序,选好目录,把我们WCF服务项目编译好后的文件
    拷贝到我们IIS目录下去,注意的是,如果你新建的是类库项目BIN文件夹下一般有Debug文件夹,我们需要把Debug文件夹下的dll文件直接拷贝到我们bin目录下面来。这样我们就可以以IIS的方式浏览我们SVC文件了。

    http://localhost:8081/Tcp

        
    [3]EF Code First 学习笔记:约定配置
        来源:    发布时间: 2013-10-28

    要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就是Fluent API,通过新增相应的配置类来覆盖默认配置。现在我们用这两个来对比了解EF中的约定配置。

    主键:KEY

    Data Annotations:通过Key关键字来标识一个主键

    [Key]
    public int DestinationId { get; set; }

    Fluent API:

    public class BreakAwayContext : DbContext
    {
    public DbSet<Destination> Destinations { get; set; }
    public DbSet<Lodging> Lodgings { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    //Fluent API
    modelBuilder.Entity<Destination>().HasKey(d => d.DestinationId);
    base.OnModelCreating(modelBuilder);
    }
    }

    外键

    Data Annotations:

    public int DestinationId { get; set; }
    [ForeignKey("DestinationId")]
    public Destination Destination { get; set; }

    注意,指定列名存在,如上面的DestinationId,则类中必须存在名称为DestinationId的属性。

    Fluent API:

    modelBuilder.Entity<Lodging>().HasRequired(p => p.Destination).WithMany(p=>p.Lodgings).HasForeignKey(p => p.DestinationId);

    长度

    Data Annotations:通过StringLength(长度),MinLength(最小长度),MaxLength(最大长度)来设置数据库中字段的长度。

    [MinLength(10),MaxLength(30)]
    public string Name { get; set; }
    [StringLength(30)]
    public string Country { get; set; }

    Fluent API:没有设置最小长度这个方法。

    modelBuilder.Entity<Destination>().Property(p => p.Name).HasMaxLength(30);
    modelBuilder.Entity<Destination>().Property(p => p.Country).HasMaxLength(30);

    非空

    Data Annotations:用Required来标识,还可以设置是否可允许空字符串,显示错误消息等。

    [Required]
    public string Country { get; set; }
    [Required(ErrorMessage="请输入描述")]
    public string Description { get; set; }

    Fluent API:

    modelBuilder.Entity<Destination>().Property(p => p.Country).IsRequired();

    数据类型

    Data Annotations:TypeName

    //将string映射成ntext,默认为nvarchar(max)
    [Column(TypeName = "ntext")]
    public string Owner { get; set; }

    Fluent API:

    modelBuilder.Entity<Lodging>().Property(p => p.Owner).HasColumnType("ntext");

    表名

    Data Annotations:Table

    [Table("MyLodging")]
    public class Lodging
    {
    public int LodgingId { get; set; }
    public string Name { get; set; }
    public string Owner { get; set; }
    public decimal Price { get; set; }
    public bool IsResort { get; set; }
    public Destination Destination { get; set; }

    }

    Fluent API:

    modelBuilder.Entity<Lodging>().ToTable("MyLodging");

    列名

    Data Annotations:Column

    [Column("MyName")]
    public string Name { get; set; }

    Fluent API:

    modelBuilder.Entity<Lodging>().Property(p => p.Name).HasColumnName("MyName");

    自增长

    如果主键是int类型,EF为默

        
    最新技术文章:
    ▪C#通过IComparable实现ListT.sort()排序
    WEB前端 iis7站长之家
    ▪Winform实现抓取web页面内容的方法
    ▪Winform实现将网页生成图片的方法
    ▪C#控制台程序中处理2个关闭事件的代码实例
    ▪WinForm实现同时让两个窗体有激活效果的特效...
    ▪WinForm实现拦截窗体上各个部位的点击特效实...
    ▪用C#的params关键字实现方法形参个数可变示例
    ▪C#判断某程序是否运行的方法
    ▪C#验证码识别基础方法实例分析
    ▪C#通过WIN32 API实现嵌入程序窗体
    ▪C#实现获取鼠标句柄的方法
    ▪C#事件处理和委托event delegate实例简述
    ▪C#获取程序文件相关信息的方法
    ▪C#中的除法运算符与VB.NET中的除法运算符
    ▪ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedLi...
    ▪Base64编码解码原理及C#编程实例
    ▪C#实现的优酷真实视频地址解析功能(2014新算...
    ▪C#和SQL实现的字符串相似度计算代码分享
    ▪C#使用Word中的内置对话框实例
    ▪C#反射之基础应用实例总结
    ▪C#生成单页静态页简单实例
    ▪C#实现SMTP邮件发送程序实例
    ▪C#实现随鼠标移动窗体实例
    ▪C#使用GDI+创建缩略图实例
    ▪C#实现通过模板自动创建Word文档的方法
    ▪C#中Response.Write常见问题汇总
    ▪C#中多态、重载、重写区别分析
    ▪WinFrom中label背景透明的实现方法
    ▪C#中out保留字用法实例分析
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3