ASP.NET MVC3--视图

本人刚开始学asp.net mvc3,以下是学习笔记:

1、视图的作用

视图的职责是向用户提供视图界面。向它提供模型的引用后,他会将模型转换为准备提供用户的格式。在asp.net mvc中,这个过程有两部分组成,其一是检查由控制器提交的ViewDataDictionary(通过ViewData访问),另外一部分是将其内容转换为html格式。

扩展:从asp.net mvc3开始,视图数据也可以通过ViewBag属性访问。而且 ViewBag.message等同于 viewBag["message"];相对于ViewBag[]来说,ViewBag.要指定类型并且参数名称要有效. 如Viewdata["hello world"]中存放一个值,那么将不能使用ViewBag访问;又如@html.TextBox("name",ViewBag.name)将无法读取,因为C#编译器翻译时必须知道其真正的参数类型,如果其中的任何一个参数是动态的,那么编译时会出错.所以修改能让编译通过的有两种方法,其一使用ViewData[“name”],其二使用(string)ViewBag.name.

2、指定视图

指定视图非常简单,按照约定,每个控制器在views目录下都有一个对应的文件夹,其名称与控制器一样,只是没有Controller后缀名,所以控制器xxxController在views目录下对应有个名称相同的xxx视图文件夹与之相对应。

例如操作方法通过View方法返回ViewResult对象,代码如下:(默认项目的控制器HomeController的index方法)

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "欢迎你!!";

            return View();
        }
return view() 操作方法返回的ViewResult对象将按照约定来确定视图,它首先在/View/ControllerName下查找与控制去名称不带Controller后缀相同的视图。通过这种方法选择的视图便是/View/Home/Index.cshtml。

默认约定也是可以重写的。如果想要Index方法渲染一个不同的试图,可以向其提供一个不同的视图名称,代码如下:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "欢迎你!!";

            return View("notIndex");
        }
它依旧是在/View/Home目录下寻找,但选择的是notIndex.cshtml作为视图。

有些情况下需要在不同的目录下寻找试图,那么将其给出完整的路径,代码如下:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "欢迎你!!";

            return View("`/View/Example/Index.cshtml");
        }
3、强类型视图

在此前有必要先了解一下什么是强类型维基百科--强类型

强类型视图指的是在视图中就声明该视图中的Model类型,比如@model Zzjs.Expert.Entities.xxx就表示该视图中的Model是xxx类,该Model就是强类型。(引用网上相对赞同的说法)
这一不详细说明,在后台,写法主要有:

1--@model IEnumerable<MvcApplication1.Models.xxx>

2--@using MvcApplication1.Model1

     @model IEnumerable<xxx>

视图的基架类型

Empty  Create Delete Details Edit  List 试图的样式和英文单词的表意差不多。

4、Razor视图引擎

Razor视图是Asp,net mvc3的默认视图引擎,干净 轻量级  简单 。

核心转换字符是@符号,@item.Length

Razor采用了一个简单的算法来判断一个邮箱地址,大多数情况下,所以想要输出@符号那么就得@@转义。

遇到无法翻译的用括号括起来,这样编译就不会出错,

HTML编码

<div>
    @{
        var items = new string[] { "one", "two", "three" };
    }
    <h2>Listing @items.Length item.</h2>
    <ul>
        @foreach (var item in items)
        { 
            <li>This item is @item .</li>
            }
    </ul>
    <span>wto753135@gmail.com</span><br />
    <span>item_@(items.Length)</span><br />
    @{
        string message = "<script>alert('hacked!');</script>";
        }//代码块
    <span>@message</span><br />//显示<script>alert('hacked!');</script>
    <span>@Html.Raw(message)</span><br />//弹框 hacked
    <label id="Message"></label>
    <br />
    <label id="Message1"></label>
</div>
<script type="text/javascript">
    $(function () {
        var message = 'Hello @ViewBag.message';
        $('#Message').html(message).show('slow');
    });
    $(function () {
        var message1 = 'Hello @Ajax.JavaScriptStringEncode(ViewBag.message)';//避免xss攻击
            $('#Message1').html(message1).show('slow');
        });
</script>
服务器端的注释用:@*......*@

_ViewStart.cshtml文件先于任何视图代码的执行,相当于母版页。

5、指定分布视图

通过PartialView方法以及PartialViewResult的形式返回分布视图。

    public class HomeController : Controller
    {
        public ActionResult Book()
        {
            ViewBag.Message = "欢迎你!!";

            return PartialView();
        }
这种情况下,将会渲染视图Book.cshtml.如果布局是由_ViewStart.cshtml页面指定,那么布局将无法渲染。这种分布视图在Ajax中部分更新是有用的。

asp.net mvc的生命周期如下:

HTTP响应----路由----控制器----视图结果----视图引擎----视图----结果 





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值