您是第 Web Page Tracking 位访客

水~墨~

昂首阔步,不留一点遗憾!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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);
        }

 

 

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; }

 

 

 

posted on 2014-02-21 16:41  水墨.MR.H  阅读(474)  评论(0编辑  收藏  举报
知识共享许可协议
本博客为水墨原创,基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的水墨(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。