读《aspnetmvc-stepbystep》笔记

读《aspnetmvc-stepbystep》笔记  读《aspnetmvc-stepbystep》笔记  这几天读了《aspnetmvc-stepbystep》,为了以后不忘记这次遇到的问题,以及此书中的一些重点观点或者主要内容,就做了一个大概的笔记。  学习软件平台:vs2008、vs2008sp1、mvc1.0rc21、传统的Web框架,如ASP/PHP/ASP.NETWebForms等等,请求的U…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

  读《aspnetmvc-stepbystep》笔记

  这几天读了《aspnetmvc-stepbystep》,为了以后不忘记这次遇到的问题,以及此书中的一些重点观点或者主要内容,就做了一个大概的笔记。

  学习软件平台:vs2008 、 vs2008 sp1 、mvc 1.0 rc2

1、传统的Web 框架,如ASP/PHP/ASP.NET Web Forms 等等,请求的URL 地址都是映射到特定的文件,基于Web 的MVC框架映射URL地址到类的方法上。这些类就是MVC 中的 Controller 控制器,它们负责处理进来的请求和用户输入,接收和保存数据,并返回结果给客户端(显示HTML、下载文件、或重定向到不同的URL 等等)。

 

2、理解ASP.NET MVC Routing

 

3、在DinnersController 的action 方法中仅仅出来业务和数据逻辑,并将相关的

数据传递给单独的视图(view)模板,view 负责生成HTML 展示。

将控制器controller 逻辑和视图view 展示分开带来很多好处,尤其是它帮助清晰隔离了应用程序代码和用户界面展示的脚本。这可以非常方便地对应用程序逻辑进行单元测试,而不需要UI 展示逻辑,也可以方便修改UI 脚本,而不会更改应用程序的代码,当然也有助于开发人员和用户界面设计人员在项目中的合作

 

4、对于mvc beta版注意:当添加不上视图模板的时候。修改以下设置。英文版的不用管,中文版的要改下,很简单,

x:\Program Files\Microsoft Visual Studio 9.0\Common7
\IDE\ItemTemplates\CSharp\Web\MVC\1033
x:\Program Files\Microsoft Visual Studio 9.0\Common7
\IDE\ItemTemplatesCache\CSharp\Web\MVC\1033

这两个目录建立2052的文件夹,,将1033的内容拷贝的2052中去,

运行x:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe /setup

 

5、对于mvc beta版注意:解决Could not load type System.Web.Mvc.ViewPage<…> 的错误未能加载类型“System.Web.Mvc.ViewPage<NerdDinner.Models.Dinners>”。

在view层下的web.config </system.web>节中,必须添加以下节

 

ContractedBlock.gif
ExpandedBlockStart.gif
Code

<pages validateRequest=”false” pageParserFilterType=”System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″
            pageBaseType
=”System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″
            userControlBaseType
=”System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″>
            
<controls>
                
<add assembly=”System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″ namespace=”System.Web.Mvc” tagPrefix=”mvc” />
            
</controls>
</pages>

 

6
、A
SP.NET MVC
在解析一个视图模板时,首先检查
\Views\[Controller]
特定目录,如果找不到,则继续到
\Views\Shared
子目录中寻找。

7、<% using (Html.BeginForm()) { %>…<% } %>ó<% Html.BeginForm(); %>…<% Html.EndForm(); %>ó<form action=”/Dinners/Edit/5″ method=”post”>

8、以获取表单参数值。一个简单的办法是使用Controller 基类的Request 属性来访问form 集合,并直接获取提交的参数值:

[AcceptVerbs(HttpVerbs.Post)]

        public ActionResult Edit(int id, FormCollection formValues)

        {…}

更好的方法是使用Controller 基类的内置方法UpdateModel()。该方法支持使用传入的表单参数更新对象的属性,它使用反射机制来解析对象的属性名称,接着基于客户端传入的参数值自动赋值给对象相关属性。

Edit(int id, FormCollection formValues)

{

    Dinner dinner = dinnerRepository.GetDinner(id);

UpdateModel(dinner);

dinnerRepository.Save();

}

9、理解ModelState 和验证HTML辅助方法:

Controller 类有一个ModelState 属性集合,可以用来提示传递到视图的model 对象是否有错误。ModelState中Error 记录识别模型属性的名称和错误信息,并允许指定友好的错误信息。

在UpdateModel() 辅助方法给model 对象的属性赋值时,如遇到异常或错误,会自动写道ModelState集合中。

1默认的CSS 错误类 – input-validation-error 定义在\content\site.css

2Html.ValidationMessage() 辅助方法,<%= Html.ValidationMessage(“EventDate”)%>

上述代码输出:<span class=”field-validation-error”> The value ‘BOGUS’ is invalid</span> =》<%= Html.ValidationMessage(“EventDate”,“*”)%>

3Html.ValidationSummary() 辅助方法将呈现总结的错误消息,通过<ul><li/></ul>元素列出在ModelState 集合中所有详细的错误消息:

 

10、在HTTP-POST 的Create 方法中,有很多办法可以访问表单提交过来的参数值。

1、一个方法是创建新的Dinner 对象,并使用UpdateModel() 辅助方法,添加Dinner 对象到DinnerRepository,并持久化到数据库。这种方法会报id为空的错,还没有找到解决出错的原因

2、Create() action 方法接收一个Dinner 对象作为方法参数。接着ASP.NET MVC 自动实例化一个新的Dinner 对象,并使用表单输入的参数赋值给Dinner 对象的属性,然后传递给action 方法

 

11、基于用途来锁定绑定p67(限定修改字段)

string[] allowedProperties = new[]{ “Title”,“Description”,

“ContactPhone”, “Address”,

“EventDate”, “Latitude”,

“Longitude”};

UpdateModel(dinner, allowedProperties);

基于类型来锁定绑定p68

 

12、所有的验证和业务规则都在模型层(Model Layer)中定义 – 而不是在Controllers 控制器和View 视图中。Controller 类和View 视图模板都不必了解模型类实现的业务规则。

 

13、ViewData 和ViewModel、定制ViewModel类:业务模型对象

和View 视图中的用户界面元素不一致,一个中介的定制ViewModel 类就可以发挥作用了。

 

14、使用ViewData 字典

、
Partial View
模板

 

15、在URL中添加page参数值

upcomingDinners.Skip((page ?? 0) * pageSize)

.Take(pageSize)

.ToList();

添加页面导航界面

 

16、认证和授权

action 过滤器: [Authorize(Users=“scottgu,billg”)]\[Authorize(Roles=“admin”)]

 

17、Ajax.ActionLink() 辅助方法是ASP.NET MVC 内置的,进行AJAX 调用一个action 方法。AjaxOptions 参数表示接收action方法返回的内容,并更新页面中id 为 rsvpmsg 的<div>元素。

Ajax.ActionLink( “RSVP for this event”,“Register”, “RSVP”,

        new { id=Model.DinnerID },new AjaxOptions { UpdateTargetId=“rsvpmsg”})

AjaxOptions 对象公开了OnSuccess,OnBegin、OnFailure 和OnComplete 事件(见details.aspx页)

安装了VS 2008 SP1 的JavaScript 智能提示补丁,下载http://tinyurl.com/vs2008javascripthotfix

18、在数据库和仓储中实现位置搜索

我们可以使用SQL 2008 提供的geospatial 特性来实现,或者使用Gary Dryden 提供的SQL 方法,参见文章:

http://www.codeproject.com/KB/cs/distancebetweenlocations.aspx 以及Rob Conery 在博客中提出的使用LINQ to SQL 方式:http://blog.wekeroad.com/2007/08/30/linq-and-geocoding/。

 

19.实现基于JSON 的AJAX搜索Action方法

20、测试 

使用AAA 测试模式创建测试方法 – 分别代表Arrange、 Act 和Assert:

Arrange – 设置测试单元;

Act – 执行测试单元,并捕获结果;

Assert – 验证执行行为;

 

21
、避免在测试过程中使用真实的数据——“依赖注入(
Dependency Injection
)”设计模式

 Mocking Framework 可以帮忙我们动态创建虚假的依赖对象,支持测试工

开源的Mocking Framework – Moq,可以从如下地址免费下载:http://www.mockframeworks.com/moq

在NerdDinner.Tests 项目中添加对Moq.dll 程序集的引用

 

注: 项目源代码下载

aspnetmvc-stepbystep 教程

 

转载于:https://www.cnblogs.com/yaunion/archive/2009/10/21/1587736.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187914.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Modelsim10.4-win64软件下载安装与破解

    Modelsim10.4-win64软件下载安装与破解1.运行modelsim-win64-10.4-se.exe,安装软件;注意可以不用安装keydrivers,安装路径不要有中文(默认安装路径是C:\modeltech64_10.4) 2.安装过程中一直选择yes即可,注意可以不用安装keydrivers,最后是Done(如果不安装keydrivers)或reboot(如果安装keydrivers)询问,选Yes、…

    2022年5月23日
  • C语言刷屏

    C语言刷屏QQ刷屏原理和复制粘贴差不多,只不过是叫系统帮你粘贴并摁下回车键。#include<stdio.h>#include<Windows.h>intmain(){ intn; charname[100]; printf(“请输入窗口名字:”); scanf(“%s”,&name);//窗口名字 printf(“请输入刷屏次数:”);…

    2022年6月8日
  • 数据挖掘十大算法(四):Apriori(关联分析算法)

    数据挖掘十大算法(四):Apriori(关联分析算法)终于到了机器学习实战的第十一章了,这也是继K-均值后的第二个无监督学习算法了。同样的该算法也是在一堆数据集中寻找数据之间的某种关联,这里主要介绍的是叫做Apriori的‘一个先验’算法,通过该算法我们可以对数据集做关联分析——在大规模的数据中寻找有趣关系的任务,本文主要介绍使用Apriori算法发现数据的(频繁项集、关联规则)。这些关系可以有两种形式:频繁项集、关联规则。    频…

    2022年5月1日
  • minicom指令_如何优雅地使用minicom

    minicom指令_如何优雅地使用minicomminicom简介安装minicom是linux下一款常用的串口调试工具。ubuntu环境下,使用如下命令安装sudoapt-getinstallminicom配置使用前需要进行配置,执行sudominicom-s可打开minicom并进入配置模式,使用方向键,选择需要配置的项目,如Serialportsetup,回车进入配置,可以看到多个配置项,此时光标在最下方。需要修改某个配…

    2022年6月8日
  • navicat orcale 15.0. 23激活码【在线注册码/序列号/破解码】[通俗易懂]

    navicat orcale 15.0. 23激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
  • leetcode-149. 直线上最多的点数(map+判重)[通俗易懂]

    leetcode-149. 直线上最多的点数(map+判重)[通俗易懂]给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。示例 1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o +————->0 1 2 3 4示例 2:输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]输出: 4解释:^|| o| o o| o| o o+—–

    2022年8月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号