MVC:  Model,View,Control

 

设置View中的数据

1. 返回model,View中强类型化

Control:

public ActionResult Browse(string Genre)
       {
           var Album = db.Genres.Include("Albums").Single(c => c.Name == Genre);
           ViewData["Genre"] = Genre;
           return View(Album);
       }

 

View: 

  @model Mvc_MusicShop_diy.Models.Genre   (强类型化,一个View只能强类型化一个)

类似的 当 control 返回  list<xx>集合,view 应当如下强类型化

@model List<Mvc_MusicShop_diy.Models.Genre> 

or 

@model  IEnumerable<Mvc_MusicShop_diy.Models.Genre>

使用:

<ul>
@foreach (var Genre in Model)
{
<li>
@Html.ActionLink(@Genre.Name, "Browse", new { Genre=@Genre.Name})
</li>

}
</ul>

 

 

2.  ViewData

Control 设置:ViewData["Provinces"] = db.Provinces.ToList();

View使用:      @using Mvc_MusicShop_diy.Models

                               ViewData["Provinces"]   as  List<Province>

 

3.  ViewBag

ViewBag.title=”购物车页面”   //设置View 页面的html元素的值

 

 

设置模版View

1._ViewStart.cshtml 代码制定了页面的默认模版的路径

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
 
查看模版页面代码 
 
<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
</head>
<body>
    <div class="page">
        <div id="header">
            <div id="title">
                <h1>欢迎光临南京网上商城</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <div id="menucontainer">
                <ul id="menu">
                    <li>@Html.ActionLink("商城主页", "Index", "Home")</li>
                    <li>@Html.ActionLink("关于商城", "About", "Home")</li>
                    <li>@{Html.RenderAction("CartSummary", "ShoppingCart", "");}</li>
 
                </ul>
            </div>
        </div>
       
        @*@{Html.RenderAction("Category", "Home");}*@
       
        <div id="main">
            @RenderBody()
        </div>
        <div id="footer">
        关于我们|联系我们|人才招聘|商家入驻|广告服务|手机京东|友情链接|销售联盟|商城社区|南京商城公益
        </div>
    </div>
</body>
</html>
 
 
注意: 所有view默认模版代码里,有完整的 html 标记 ,包含title,body
         @RenderBody() 占位符是view页面的代码所在的位置
 
 
 
2.  通用模版 

[ChildActionOnly]    //表明了,通过url :  /control/CartSummary 访问是不存在的;只作为其他View的一部分

       public ActionResult CartSummary()

       {

           var cart = ShoppingCart.GetCart(this.HttpContext);

                       ViewData["CartCount"] = cart.GetItemsCount();

                       return PartialView();  //或者 PartialView("CartSummary");

       }

 

在 _ViewStart.cshtml 中使用

<li>   @{Html.RenderAction("CartSummary", "ShoppingCart", "");}  </li>

注意:@{     }

 

 

MVC3自带的客户端验证和服务端验证

原理:model与view 模型 绑定

必须引用:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

 

 

@Html.ValidationSummary(true)  在指定地方将错误集中展示  ,生成的html代码为

  <ul><li>错误1</li><li>错误2</li></ul>

 

@Html.ValidationMessageFor(model => model.Title)     展示title出错的信息(根据model中类型与属性自动 js 判断和服务端判断)

 

服务端根据 ModelState.IsValid   Bool 的值 (根据model相关约束验证后是否有错误)

   [HttpPost]
        public ActionResult Create(Album album)
        {
            
            if (ModelState.IsValid)
            {
                db.Albums.Add(album);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }
 
            return View(album);
        }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

 

 

Model 中添加自定义约束

比如: 某不能为空,若为空提示自定义的错误消息;view中显示的元素名称为XX?email,phone 正则验证;

首先得引用命名空间

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;

 

[DisplayName("手机号")]

[Required(ErrorMessage = "手机号不能为空")]

[RegularExpression(@"^1[3|4|5|8]\d{9}$", ErrorMessage = "手机号格式错误")]

public  string phone{get;set;} 

[ScaffoldColumn(false)]   //主键;当与view模型绑定生成自动生成html元素的时候,是否隐藏该列

  public int AddressId { get; set; }

 

 

 

MVC3 学习总结一(未发布)的更多相关文章

  1. MVC3学习:利用mvc3+ajax实现全选和批量删除

    本例数据库操作使用EF code first; 先利用mvc自带的模板,先生成一个list视图,然后再手动添加复选框和删除按钮 <table> <tr> @*在标题行添加一个全 ...

  2. MVC3学习:利用mvc3+ajax实现登录

    用到的工具或技术:vs2010,EF code first,JQuery ajax,mvc3. 第一步:准备数据库. 利用EF code first,先写实体类,然后根据实体类自动创建数据库:或者先创 ...

  3. ASP.NET MVC3学习心得-----表单和HTML辅助方法

    5.1表单的使用 5.1.1  action和method的特性 表单是包含输入元素的容器,包含按钮.复选框.文本框等元素,表单的这些输入元素使得用户能够向页面中输入信息,并把输入信息提交给服务器.A ...

  4. MVC3学习随记一

    最近才接触mvc,也是才接触linq语法,还有EntiyFramework,个人感觉这种开发模式还是挺不错的,随手记点笔记,简单做个增删改查吧 一.实例化上下文ObjectContext: 引用空间那 ...

  5. MVC3学习:基于ObjectContext的数据增删改查操作

    数据库里面的表格,映射为对应的实体类.实体类的编写,可以自己手动编写,也可以使用工具或插件自动生成.在MVC3里面,我们可以使用VS的POCO插件自动生成实体类.如下图: 关于POCO插件的安装与使用 ...

  6. mvc3 学习链接收集

    原文发布时间为:2011-04-17 -- 来源于本人的百度文章 [由搬家工具导入] The mvc3 study links collection http://dotnetslackers.com ...

  7. [大数据学习研究] 4. Zookeeper-分布式服务的协同管理神器

    本来这一节想写Hadoop的分布式高可用环境的搭建,写到一半,发现还是有必要先介绍一下ZooKeeper这个东西. ZooKeeper理念介绍 ZooKeeper是为分布式应用来提供协同服务的,而且Z ...

  8. tomcat发布项目时,空文件夹未发布成功

    问题背景: 项目发布到服务器时,缺少文件夹,到时向此文件夹写数据时发生错误. 后来经查,缺少这个文件夹,项目部署发布时,并不会把空文件夹发布上去 解决: 1.在空文件中加入,一个文件.就可以发布成功 ...

  9. 【腾讯海纳】系统未发布时如何获取获取property_id在本地进行测试?

    有现成https协议域名使用者,可忽略此文. 直接先上图,明白的人看一眼图片就知道怎么拿了,如下所示: 解释说明: 在完成添加套件,以及测试应用的前提下,按如下操作流程: 1.访问路径:登录“海纳开发 ...

随机推荐

  1. 给俺的 CSDN 博客加背景音乐 - 高大尚的《心经》背景音乐

    给俺的 CSDN 博客加背景音乐 - 高大尚的<心经>背景音乐 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途- ...

  2. Python基础(14)_python模块之configparser模块、suprocess

    9.configparser模块 模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 常见的软件格式文档格式如下: [D ...

  3. LeetCode:下一个排列【31】

    LeetCode:下一个排列[31] 题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排 ...

  4. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

  5. deeplink

    http://www.cnblogs.com/shadajin/p/5724117.html Deeplink,简单讲,就是你在手机上点击一个链接之后,可以直接链接到app内部的某个页面,而不是app ...

  6. mongodb简单用法

    修改器: $inc: 增加已有的键值,如果键值不存在就创建一个 数据库中存在这样的数据:{ , "url": "www.example.com", }db.fz ...

  7. hadoop04---shell

    Linux上的mysql安装之后卸载是卸载不干净的,ping服务器ping不通就是把icmp协议关闭了,ping使用的是icmp协议. Export是全局变量,所有用户登录进来都可以使用. 1.ipt ...

  8. jni 编译错误error: unknown type name '__va_list'

     platforms\android-9\arch-arm\usr\include\stdio.h:257:37: error: unknown type name '__va_list'     解 ...

  9. Docker容器技术-Docker架构

    一.Docker系统架构 1.Docker基础架构 1)Docker守护进程 负责容器的创建.运行和监控,以及镜像的构建和存储. docker daemon 2)Docker客户端 通过HTTP与Do ...

  10. 20145230《java学习笔记》第九周学习总结

    20145230 <Java程序设计>第9周学习总结 教材学习内容 JDBC JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作, ...