概述
导航属性。
http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html
自学MVC看这里——全网最全ASP.NET MVC 教程汇总
ASP.NET MVC 音乐商店 - 0 概览
http://www.cnblogs.com/haogj/archive/2011/11/08/2241710.html
MusicStore 项目的完整配套视频!
Asp.Net MVC 控制器
这篇教程探索了ASP.NET MVC控制器(controller)、控制器动作(controller action)和动作结果(action results)这几个主题。在读完本篇教程之后,你将会理解控制器如何控制访问者与ASP.NET MVC网站进行交互的方式。
控制器的名字必须含有Controller后缀.
阻止公共方法被调用
如果你需要在控制器中创建一个公共方法,但是你不想将这个方法发布为控制器动作,那么你可以通过使用[NonAction]特性来阻止该方法被外界调用。举个例子,代码清单2中的控制器含有一个叫做CompanySecrets()的公共方法,它使用[NonAction]特性进行了修饰。
Asp.Net MVC 路由
每个ASP.NET MVC应用程序都具有的一个重要功能,称作ASP.NET路由(ASP.NET Routing)。ASP.NET路由模块负责将即将到来的浏览器请求映射到特定的MVC控制器动作。学完这篇教程之后,你将会理解标准的路由表是如何将请求映射到控制器动作的。
1. 理解默认路由表
当你创建一个新的ASP.NET MVC应用程序时,应用程序已经被配置为使用ASP.NET路由。ASP.NET路由在两个地方设置。
第一点,在你的应用程序Web配置文件(Web.config文件)中启用ASP.NET路由。在配置文件中有四个节点与路由有关:sytem.web.httpModules节,system.web.httpHandlers节,system.webserver.modules节,以及system.webserver.handlers节。特别要小心不要删除了这些节点,因为没有它们路由将不能工作。
第二点,也是更为重要的一点,在应用程序的Global.asax文件中创建了一个路由表。Global.asax文件是一个特殊的文件,它包含了作用于ASP.NET应用程序生命周期事件的事件处理程序。路由表在Application Start事件期间创建。
实现IRouteConstraint接口来实现一个自定义路由。这是一个极其简单的接口,它只描述了一个方法:
bool Match(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
-----
代码清单2 - Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using MvcApplication1.Constraints;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Admin",
"Admin/{action}",
new {controller="Admin"},
new {isLocal=new LocalhostConstraint()}
);
//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}", // URL with parameters
// new { controller = "Home", action = "Index", id = "" } //Parameter defaults
//);
}
protected void Application_Start(){
RegisterRoutes(RouteTable.Routes);
}
}
}
-----
Asp.Net MVC 视图(概述) - Part.1
mvc最接近页面的东西是称为视图(View)的东西。
创建一个视图
你可以在解决方案浏览器中的文件夹上点击右键,并且选择菜单项“Add(添加)”、“New Item(新建项)”(如图1)。选择“MVC View Page”模板将标准视图添加到你的项目中。
---之外-----------
小窥.NET MVC 自带的两种视图引擎——Razor、Aspx
MVC自带的视图引擎是有两种的,一种是Razor,会以cshtml后缀的文件作为视图文件;另一种是ASPX,以aspx后缀的文件作为视图文件。一开始,对这两个视图引擎存在不少的疑惑,然后经过一番百度与实践操作后发现:前者是一个新型的视图引擎Razor,它具有更智能的语法,
并以@{}取代以往的<% %>,
使语句变得更加简洁,而且是能被测试的;而后者则是我们以往一直使用的ASPX,它的一个区别与Razor的优点是它能够拖拉控件,使用方便。
mvc4.0
ADO.NET EF:[1]创建实体数据模型 a.edmx(添加现有项,ado.net实体数据模型)
模型中包括的数据库对象包括 表、视图、存储过程和函数。
数据库有更新,删掉再添加最方便。
------之外-----
---Asp.Net MVC(理解模型、视图和控制器) - Part.2
理解控制器Controller
------
------------
理解视图View
-----------
由HomeController类暴露出的两个控制器动作,Index()和About(),都返回了一个视图。视图含有将会发送给浏览器HTML标记和内容。当使用ASP.NET MVC应用程序时,一个视图等同于一个页面。
你必须在正确的位置创建你的视图。HomeController.Index()动作返回了一个位于以下路径的视图:
ViewsHomeIndex.aspx
HomeController.About()动作返回一个位于以下路径的视图:
ViewsHomeAbout.aspx
一般而言,如果你想为一个控制器动作返回一个视图,那么你需要在Views文件夹下创建一个子文件夹,这个文件夹与你的控制器同名。在子文件夹下,你必须创建一个.aspx文件,它的名字与控制器动作相同。
--------------------
Net)编写脚本。你使用脚本显示动态的内容,例如数据库数据。
6. 理解模型Model
------------
MVC的模型包含了你应用程序中的所有逻辑,这些逻辑没有包含在视图或者控制器中。模型应该包含你的应用程序中的所有业务逻辑和数据库访问逻辑。
视图应该仅包含与生成用户界面有关的逻辑。控制器应该仅仅只包含最少量的逻辑,用于返回正确的视图或者将用户重定向到另一个动作。任何其他的事情都应该包含在模型中。
通常,你应该竭尽全力创建一个丰富的模型以及一个瘦小的控制器。你的控制器方法应该只包含几行代码。如果一个控制器动作变得太丰富,那么你应该考虑将这些逻辑抽取出来放置到Models文件夹的新类中。
----------
Model封装了你的应用数据、应用流程和业务逻辑。
◆View从Model获取数据并格式化数据以进行显示。
◆Controller控制程序流程,接收输入,并把它们传递给Model和View。
ASP.NET MVC (一)——深入理解ASP.NET MVC
ASP.NET MVC (二)——ASP.NET MVC 数据传递
ASP.NET vs MVC vs WebForms
许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上ASP.NET是创建WEB应用的框架而MVC是能够用更好的方法来组织并管理代码的一种更高级架构体系,所以可以称之为ASP.NET MVC。
我们可将原来的ASP.NET称为 ASP.NET Webforms,新的MVC 称为ASP.NET MVC.
在Web应用程序中从两方面来定义性能:
1. 响应时间: 服务器响应请求的耗时
2. 带宽消耗: 同时可传输多少数据。
Asp.Net MVC 由Model,View,Controller三部分组成。Controller中包含后台代码逻辑,View是ASPX,如纯HTML代码,Model是中间层。通过上图可获得这三部分的关系。
所以会发现MVC的改变有两点,View变成简单的HTML,后台代码移到简单的.NET类中,称为控制器。
以下是ASP.NET MVC 请求流的通用步骤:
Step 1:首先获取控制器。
Step 2:依赖行为控制器创建Model对象,Model通过转换调用数据访问层。
Step 3:数据填充Model之后,传递到View 显示层,实现显示的目的。
首先我们从Controller 控制器开始,因为Controller是MVC体系架构的核心部分。
为了我们能够更好的理解Controller,我们首先需要理解Controller中涉及的专业术语:用户交互逻辑。
2. Action(行为) 方法是什么?
Action 方法 简单的来说就是一个Controller内置的public类型的方法,能够接收并处理用户的请求,上例中,GetString 方法返回了一个字符串类型的响应。
View部分
Controller是处理用户请求,并做出响应,通常情况下响应都是以显示在浏览器中,使用HTML代码,浏览器才可识别。HTML有图像,文本,输入控件等。通常称为用户界面的设计即UI层,在ASP.net MVC称为View。
?Step1 –创建新的Action 方法
在TestController中添加新的Action 方法,如下:
1: public ActionResult GetView()
2: {
3: return View("MyView");
4: }
打开MyView.cshtml 文件,并添加以下内容:
@{Layout = null;}
<!DOCTYPE html>
<html><head><meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head><body>Welcome to MVC 5 Step by Step learning
</body></html>
实验二:Q&A
1. 为什么View会放在Test的文件夹中?
View是与放置在特定目录下的Controller相关。这个特定文件夹是以”ControllerName”命名的,并且放在View文件夹内
2. 在多个控制器中无法重用View吗?
当然可以,我们需要在将这些文件放在特定的Shared文件夹中。将View 放在Shared文件夹中所有的Controller都可用。
3. 单个Action 方法中可引用多个View吗?
可以,ASP.NET MVC的view和Controller不是严格的匹配的,一个Action Method可以引用多个view,而一个View也可以被一个Action方法使用如下代码所示:
1: public ActionResult GetView()
2: {
3: if(Some_Condition_Is_Matching)
4: {
5: return View("MyView");//页面叫myView
6: }
7: else
8: {
9: return View("YourView");
10: }
11: }
http://www.cnblogs.com/powertoolsteam/p/MVC_two.html
ASP.NET MVC (二)——ASP.NET MVC 数据传递
Controller与 View之间的值传递
View将从从Controller获得Model中的数据。
Model是MVC中 表示业务数据的层。
ViewBag的使用
ViewBag可以称为ViewData的一块关于语法的辅助的糖果,ViewBag使用C# 4.0的动态特征,使得ViewData也具有动态特性。
ViewData与ViewBag对比:
ViewData ViewBag
它是Key/Value字典集合.它是dynamic类型对像
从Asp.net MVC 1 就有了. ASP.NET MVC3 才有
基于Asp.net 3.5 framework.基于Asp.net 4.0与.net framework
ViewData比ViewBag快.ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型.在ViewPage中查询数据时不需要类型转换
有一些类型转换代码.可读性更好
数据传递是MVC知识的重要组成部分,深入理解了这部分知识,能够帮助我们更好的进行MVC的开发。同时,请记得借助开发工具来助力开发过程,使用 ComponentOne Studio ASP.NET MVC 这款轻量级控件,工作效率大大提高的同时,工作量也会大大减少。
ASP.NET MVC (三)——ASP.Net MVC 数据处理
http://www.cnblogs.com/powertoolsteam/p/MVC_three.html
数据访问层
在实际开发中,如果一个项目不包含任何数据库,那么这个项目是不完整的,我们在一二节实例中未涉及数据库,在本节开始,实验8中讲解一个关于数据库和数据库层的实例。
本节将使用SQL Server和EF(Entity Framework)创建相关的数据库及数据库访问层。
简述实体框架(EF)
EF是一种ORM工具,ORM表示对象关联映射。
在RDMS中,对象称为表格和列对象,而在.net中(面向对象)称为类,对象以及属性。
任何数据驱动的应用实现的方式有两种:
1. 通过代码与数据库关联(称为数据访问层或数据逻辑层)
2. 通过编写代码将数据库数据映射到面向对象数据,或反向操作。
ORM是一种能够自动完成这两种方式的工具。EF是微软的ORM工具。
什么是代码优先的方法?
EF提供了三种方式来实现项目:
l 数据库优先方法——创建数据库,包含表,列以及表之间的关系等,EF会根据数据库生成相应的Model类(业务实体)及数据访问层代码。
l 模型优先方法——模型优先指模型类及模型之间的关系是由Model设计人员在VS中手动生成和设计的,EF将模型生成数据访问层和数据库。
l 代码优先方法——代码优先指手动创建POCO类。这些类之间的关系使用代码定义。当应用程序首次执行时,EF将在数据库服务器中自动生成数据访问层以及相应的数据库。
什么是POCO类?
POCO即Plain Old CLR对象,POCO类就是已经创建的简单.Net类。在上两节的实例中,Employee类就是一个简单的POCO类。
ASP.NET MVC (四)——用户授权认证问题
http://www.cnblogs.com/powertoolsteam/p/MVC_four.html
---|||||||||||||||||||||||||||||||||---------------------
MVC 3 数据验证 Model Validation 详解
http://www.cnblogs.com/jiagoushi/archive/2013/01/25/2876725.html
看到了实际效果,我们来逐个分析一下每个验证Attribute的实现方式 极其注意方式。
Required 必填项 表示的是这个字段值是必填的。
[Required(AllowEmptyStrings = false, ErrorMessage = "用户名不能为空")]
Display 字段显示的名称 表示该字段显示的是Name值,而不是字段本身的名称
[Display(Name="password")]
StringLength 表示的是验证字符串的长度。我们可以设置最小长度和最大长度,如果不在这个范围内,则会提示错误信息
[StringLength(20, MinimumLength = 6, ErrorMessage = "用户名不能大于{2} 且要小于{1}")]
其中我们看到ErrorMessage中有占位符存在,其实这个占位符很容易理解,就是{0}表示的是字段本身的名称,{1}表示它前面的第一个参数,{2}表示它前面的第二个参数。
ScaffoldColumn 表示的是是否采用MVC框架来处理 设置为true表示采用MVC框架来处理,如果设置为false,则该字段不会在View层显示,里面定义的验证也不会生效。
[ScaffoldColumn(false)]
Remote 表示的是进行远端验证,这个相当于我们采用ajax方式来异步的请求服务器,并返回信息。最常用的就是验证用户名是否重复。下面这个验证是异步调用ValidateController下面的User Action 并且返回结果为json值。
[Remote("User", "Validate", HttpMethod = "post", ErrorMessage = "用户名已经存在")]
DataType 表示的是字段的数据类型 这个会影响到字段在View层的显示效果。如果设置为password,则输入时会用*替换。
[DataType(DataType.Password)]
RegularExpression 正则表达式验证。正则表达式我曾经在我的一篇博客中有所介绍。正则表达式是验证字符串的利器,我们必须掌握的。前面是验证模式,后面是出错显示的错误信息。
使用正则表达式抓取博客园列表数据
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9]+.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正确")]
Compare 比较两个字段值是否相同,这个如果我们采用js进行验证的话,最少需要三行,这还只是客户端验证。那么在MVC中就比较容易实现了。
[Compare("Email", ErrorMessage = "邮箱要相同")]
在Compare 验证中有一个地方需要注意,就是第一个参数,它是另一个字段的名称,我们一定要注意大小写正确,如果错误的话,验证就不会通过的。
Range 表示的大小数据的大小验证。这个Attribute可以验证int,double,decimal等数据类型的值的大小范围。 表示的是在10和100之间,包括10和100
[Range(10, 100, ErrorMessage = "年龄不能大于{2} 不能小于{1}")]
ReadOnly 表示字段是否只读。 这个在View层我有时测试会没有执行。具体原因还未知。
DisplayFormat 表示的数据显示的样式。其实这个不属于数据验证特性,而应该属于数据格式。如果要启用格式设置,第一个参数一定要设置为true,第二个就和我们toString()方法后面的参数一样。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:c}")]
UiHint 告诉MVC 指定的模版。
HiddenInput 隐藏域显示
其实我个人是将数据验证的这些特性分为两类,一类是真正的进行验证,Required,Range,StringLength,Display,Remote,RegularExpression,Compare,Range。这些特性是真正会进行验证的Attribute。另外几个Display,ReadOnly,DataType,DisplayFormat,ScaffoldColumn等和字段的显示有关,没有真正的和服务器端进行验证。
我们可以使用MVC提供的各种验证特性,那么我们是否可以自己来定义自定义特性验证呢。MVC有着巨大的可扩展性,我们也可以自己进行扩展,有两种扩展方式,一种就是可以重复使用的和MVC框架中验证,只要继承自ValidationAttribute 就可以实现重复使用的验证特性,另一种就是内包含的模式,它是只验证特定的Model,继承自IValidatableObject可以实现字包含的验证。
--|||||||||||||||||||||||||||||||||-------------
MVC HtmlHelper用法大全
HtmlHelper用来在视图中呈现 HTML 控件。
以下列表显示了当前可用的一些 HTML 帮助器。 本主题演示所列出的带有星号 (*) 的帮助器。
?ActionLink - 链接到操作方法。
?BeginForm * - 标记窗体的开头并链接到呈现该窗体的操作方法。
?CheckBox * - 呈现复选框。
?DropDownList * - 呈现下拉列表。
?Hidden - 在窗体中嵌入未呈现的信息以供用户查看。
?ListBox * - 呈现列表框。
?Password - 呈现用于输入密码的文本框。
?RadioButton * - 呈现单选按钮。
?TextArea - 呈现文本区域(多行文本框)。
?TextBox * - 呈现文本框
--|||||||||||||||||||||||||||||||||--
http://www.cnblogs.com/jyan/archive/2012/07/23/2604529.html
--------@RenderBody、@RenderPage、@RenderSection用法-----
在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout。cshtml)放在了共享视图文件夹中。模板页:@RenderBody()占位符;局部页面:@RenderPage();模板页预设区域:@RenderSection("")
--||||MVC HTML辅助类常用方法记录|||||||||||||||--
(1)@Html.DisplayNameFor(model => model.Title)是显示列名,
(2)@Html.DisplayFor(modelItem => item.Title)是显示列的内容
(3)@Html.ActionLink("Create New", "Create")是超链接,跳转到model中的create页面,引用的是controller中create方法;
(4)@Html.ActionLink("Edit", "Edit", new { id=item.ID })编辑页面;
(5)@using (Html.BeginForm()) { @Html.ValidationSummary(true)}用于客户端验证,其Html.BeginForm()表示在本页显示
(6)<div class="editor-label">
@Html.LabelFor(model => model.Time)标签(lqy备注:其实是框,display显示文本)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Time)编辑框
@Html.ValidationMessageFor(model => model.Time)验证合法性错误显示
</div>
7.@Truncate 截断 @Truncate(item.Artist.Name, 25)
8.@Html.BeginForm、@Html.ValidationSummary、@Html.HiddenFor、@Html.LabelFor、@Html.EditorFor、@Html.ValidationMessageFor、@Html.TextBoxFor等
--|||||-----
通过为模型类增加数据描述的 DataAnnotations ,我们可以容易地为应用程序增加验证的功能。DataAnnotations 允许我们描述希望应用在模型属性上的验证规则,ASP.NET MVC 将会使用这些 DataAnnotations ,然后将适当的验证信息返回给用户。
增加验证
我们将会使用下列的 DataAnnotations
?Required 必须 – 表示这个属性是必须提供内容的字段
?DisplayName 显示名 – 定义表单字段的提示名称
?StringLength 字符串长度 – 定义字符串类型的属性的最大长度
?Range 范围 – 为数字类型的属性提供最大值和最小值
?Bind 绑定 – 列出在将请求参数绑定到模型的时候,包含和不包含的字段
?ScaffoldColumn 支架列 - 在编辑表单的时候,需要隐藏起来的的字符
---virtual当类数据类型 延迟加载 EF-Code First 使用延迟加载---------------
----DbSet(TEntity) 类 (System.Data.Entity)---
--ViewData ViewBag 比较--
-- MVC 控制器向View传值的三种方法 (类似于键值对 cookie从controler传值到页面)--
1.你能把一个对象作为View方法的参数传递给视图.
2.用ViewBag(视图包)传递数据,View Bag 允许在一个动态的对象上定义任意属性,并在视图中访问它.这个动态的对象可以通过Controller.ViewBag属性访问它.
3.使用View Data传递数据,Controller类的ViewData属性进行访问的.这个方法,在视图中需要对对象进行转换.
AcceptVerbs("Get")/AcceptVerbs("Post")、 [HttpPost]
----------------------
MVC一样可以用iframe,用Partial View也可以
用MVC,同一模块可采用加载局部也等一系列方法,如:RenderPage、PartialView、include、iframe、frameset、RenderAction(Action返回PartialView)…
在.NET MVC下不用iframe实现局部加载html http://www.tuicool.com/articles/iiAnAj
------------------
最后
以上就是昏睡早晨为你收集整理的mvc的全部内容,希望文章能够帮你解决mvc所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复