• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC3.0新特性之View

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

asp.net mvc 之 asp.net mvc 3.0 新特性之 View(Razor):

  • Razor 的语法
  • Razor 与 Model
  • Razor 与布局



示例
1、Razor 概述
RazorDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
using MVC30.Models;
 
namespace MVC30.Controllers
{
    public class RazorDemoController : Controller
    {
        public ActionResult Summary()
        {
            return View();
        }
    }
}


Summary.cshtml

@{
    ViewBag.Title = "Razor 概述";
}
 
<p>
使用 Razor 之前,要在 Web.Config 中做如下配置
<br />
<textarea rows="20" style="width: 100%">
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
 
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
</textarea>
</p>
 
<p>
    View 在每次 Render 之前都会先执行 _ViewStart.cshtml 中的代码
</p>



2、Razor 语法简介
RazorDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
using MVC30.Models;
 
namespace MVC30.Controllers
{
    public class RazorDemoController : Controller
    {
        public ActionResult Syntax()
        {
            return View();
        }
    }
}

 
Syntax.cshtml

@{
    ViewBag.Title = "Razor 语法";
}
 
<p>
    使用@符号加{},直接在 html 页面中写 C#
    <br />
    @{ var currentTime = DateTime.Now; } @* 相当于 <% Htmlvar currentTime = DateTime.Now; %> *@
    @currentTime.ToString("yyyy-MM-dd")
</p>
 
<p>
    使用@符号,直接在 html 页面中写 C# 并输出结果
    <br />
    当前 URL:
    @Request.Url @* 相当于 <%= Request.Url %> *@
    <br />
    当前 URL:
    @{
        @Request.Url;
    }
</p>
 
<p>
    想输出字符@怎么办?,那就@@
    <br />
    webabcd@@abc.com
</p>
 
<p>
    在 Razor 中写服务端注释(客户端不可见)
    @* code *@
</p>
 
<p>
    Razor 自带的类型转换方法
    <br />
    例:AsInt(), IsInt(), AsBool(), IsBool(), AsFloat(), IsFloat(), AsDecimal(), IsDecimal(), AsDateTime(), IsDateTime()
    <br />
    类似 AsInt() 的方法会有一个重载方法 AsInt(int defaultValue),用于当转换失败时返回指定的默认值
    @{
        var tmp = "2/14/1980";
        var date = tmp.AsDateTime();
    }
    @date.ToString("yyyy-MM-dd")
</p>
 
<p>
    输出文本的方法
    <br />
    @*
        <text></text>
        或者
        @:
    *@
    @{
        <text>我是文本</text>
        <br />
        @:我是文本
    }
</p>
 
<p>
    获取文件的 URL 绝对路径的方法,一般用于 img 标签,link 标签,a 标签中所引用的文件的完全 url 路径
    <br />
    <img alt="" src="@Href("~/Content/themes/base/images/ui-icons_888888_256x240.png")" />
</p>
 
<p>
    Html Helper, Ajax Helper, Url Helper 依然可以使用
    <br />
    @Html.TextBox("txt", "我是 TextBox")
</p>

 

3、Razor 的与 Model 相关的 Demo
User.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace MVC30.Models
{
    public class User
    {
        public int ID { get; set; }
         
        public string Name { get; set; }
 
        public string Password { get; set; }
 
        public string ConfirmPassword { get; set; }
 
        public DateTime DateOfBirth { get; set; }
 
        public string Comment { get; set; }
    }
}


RazorDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
using MVC30.Models;
 
namespace MVC30.Controllers
{
    public class RazorDemoController : Controller
    {
        // 用于演示 View 如何获取数据
        public ActionResult Model()
        {
            // ViewBag 的本质就是把 ViewData 包装成为 dynamic 类型
            ViewBag.Author = "webabcd";
 
            var list = new List<User>()
            {
                new User { ID = 1, Name = "webabcd", DateOfBirth = new DateTime(1980, 2, 14), Comment = "<b>mvp</b>" },
                new User { ID = 2, Name = "prettygyy", DateOfBirth = new DateTime(1981, 6, 26), Comment = "<b>mvp</b>" }
            };
 
            return View(list);
        }
    }
}


_MyLayout_ParitalView.cshtml

@*
    通过 @model 指定 Model 的类型,同时 Model 对象就是 Html.Partial() 或 Html.RenderPartial() 时传递过来的对象
*@
 
@using MVC30.Models;
@model User
            
<li>@Model.Name</li>


Model.cshtml

@*
    通过 @using 引入命名空间
    通过 @model 指定 Model 的类型,同时 Model 对象就是 Action 返回的数据
*@
 
@using MVC30.Models;
@model List<User>
 
@{
    ViewBag.Title = "Razor 的与 Model 相关的 Demo";
}
 
<p>
    <!--
        演示 ViewBag 的用法
    -->
    Author: @ViewBag.Author
</p>
 
<div>
    <ul>
        <!--
            Model 就是 Action 返回的数据
        -->
        @foreach (var user in Model)
        {
            if (@user.Name == "webabcd")
            {
                <!--
                    默认输出的是经过 HTML 编码后的数据,如果需要输出原始数据则使用 Html.Raw()
                -->
                <li>@user.Name (@Html.Raw(@user.Comment))</li>
            }
            else
            {
                <li>@user.Name (@user.Comment)</li>
            }
        }
    </ul>
</div>
 
 
<!--
    Html.Partial 与 Html.RenderPartial 的区别:
        Html.Partial - 直接将 View 的结果作为一个字符串输出
        Html.RenderPartial - 将 View 作为一个用户控件嵌入到当前的 HttpContext 中
 
    Html.Action 与 Html.RenderAction 的区别(演示参见 ControllerDemo/ChildActionOnlyDemo.cshtml):
        Html.Action - 直接将 Action 的结果作为一个字符串输出
        Html.RenderAction - 将 Action 作为一个用户控件嵌入到当前的 HttpContext 中
 
    Html.Partial, Html.RenderPartial 与 Html.Action, Html.RenderAction 的区别:
        二者都需要指定 View,前者的 View 不需要 Action,而后者的 View 必须要有 Action
-->
<div>
    <ul>
        @foreach (var user in Model)
        {
            @Html.Partial("_MyLayout_ParitalView", user)
            @*
                <%= Html.Partial("_MyLayout_ParitalView", user) %>
            *@
        }
    </ul>
</div>
 
<div>
    <ul>
        @{
            var firstUser = Model.First();
            Html.RenderPartial("_MyLayout_ParitalView", firstUser);
            @*
                <% Html.RenderPartial("_MyLayout_ParitalView", firstUser); %>
            

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
自定义安装visualstudio2010开发asp.net发布时间:2022-07-10
下一篇:
asp.net中http提交数据所遇到的那些坑发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap