• 第6章 强类型视图方法


    第6章 强类型视图方法

    clip_image004

    6.1 委托进阶

    6.1.1 初识委托

    语法:

    访问修饰符 delegate 返回类型 名称(参数列表);

    示例:

    public delegate double MultiOp(double x);//定义

    static double Multiply(double x){ return x * x; }//定义方法

    MultiOp compute = new MultiOp(Multiply);//使用委托

    委托和类是同一级别的,委托相当于指向方法的一个指针,当委托对象指向

    具体方法的时候,调用委托对象就相当于调用方法,必须保证被指向的方法定义

    和委托一致。

    6.1.2 匿名方法

    语法:

    >delegate(参数列表){表达式或语句块}

    示例:

    public delegate double MultiOp(double x);

    public static double Operate(double x,MultiOp ops)

    {

    return ops(x);

    }

    double result = Operate(2, delegate(double x){return x * x;});

    6.1.3 Lamda表达式

    Lamda表达式是匿名方法的自然演进,它的本质是匿名方法。

    语法:

    (参数列表)=>表达式或语句块

    示例:

    public delegate double MultiOp(double x);

    public static double Operate(double x,MultiOp ops)

    {

    return ops(x);

    }

    double result = Operate(2, (x)=> x * x);

    6.1.4 泛型委托Func<in T,out TResult>

    在.NET中,提供了一些默认的委托形式,在ASP.NET MVC中,频繁使用到一种

    泛型委托,他在.NET中的完整定义如下。

    >public delegate TResult Func<in T,out TResult>(T arg);

    该泛型委托定义了两个泛型,一个是in修饰的T类型,代表输入类型,另外

    一个是out修饰的TResult类型,代表输出类型。

    6.1.5 强类型视图扩展方法

    Html.xxxFor(…);

    6.2 维护图书信息

    6.2.1 文件上传

    在表单的属性设置上,enctype和method都必须设置成下面代码所示的值。

    ><form action=”/File” enctype=”multipart/form-data”

    >method=”post”/>

    在服务器端接收是,有别于使用Reques.Form,一般使用Request.Files接收

    数据。在实际动作方法开发中,会利用动作方法参数映射的功能,可以直接映射

    成HttpPostedFileBase类型。

    HttpPostedFileBase类成员

    属性方法

    用途

    Int ContentLength{get;}

    获取上载文件的大小

    String ContentType{get;}

    获取上载文件的MIME内容类型

    String FileName{get;}

    获取客户端上文件的完全限定名

    Sream InputStream{get;}

    获取Sream对象,该对象指向一个上载文件。

    void SaveAs(string filename)

    保存上载文件内容

    示例:

    <form action="/File" enctype="multipart/form-data"

    method="post"/>

    <input type="file" name="file" />

    <input type="submit" name="upload" value="提交" />

    </form>

    [HttpPost]

    public ActionResult Index(HttpPostedFileBase file)

    {

    string strpath = Server.MapPath("~/files/"

    + file.FileName.Substring(file.FileName.LastIndexOf(@"")));

    file.SaveAs(strpath);//把文件保存在此路径中

    return View();

    }

    6.3.2 富文本编辑器

    第一步,在项目中添加ckeditor相关资源文件

    第二步,引用ckeditor.js脚本

    第三步,创建一个<textarea/>表单域

    第四步,调用脚本将textarea替换成ckeditor

    示例:

    <script type="text/javascript"

    src="<%=Url.Content("~/ckeditor/ckeditor.js") %>"></script>

    <% using (Html.BeginForm())

    {%>

    <%: Html.TextArea("content",new { style = "80%" })%>

    <script type="text/javascript">

    CKEDITOR.replace('content');

    </script>

    <p>

    <input type="submit" name="upload" value="提 交" />

    </p>

    <%} %>

    [ValidateInput(false)]

    [HttpPost]

    public ActionResult Index(string content)

    {

    ViewData["Content"] = content;

    return View("Result");

    }

    6.4 定制视图模版

    在ASP.NET MVC视图开发中,除了Html.TextBoxFor()、Html.AreaFor()这

    样指定输出形式的辅助方法外,还有两种特殊的方法Html.EditorFor()和Html.

    DisplayFor(),它们支持使用模版呈现页面内容,在某些特定场合,能简化视图

    开发。

    6.4.1 Visual Studio代码模版

    clip_image006

    6.4.2 使用Html.EditFor()显示视图

    1.按类型定义和应用模版

    步骤:

    (1) 在ViewsShared目录下创建”EditorTemplates”文件夹。

    (2) 在”EditorTemplates”文件夹下按类型名称命名视图,扩展名

    为”.ascx”分部视图

    (3) 实现模版代码

    (4) Html.EditFor(model)

    示例

    <%@ Control Language="C#"

    Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>

    <%: Html.TextAreaFor(m=>m,new { style = "80%" })%>

    <script type="text/javascript">

    CKEDITOR.replace('<%= ViewData.ModelMetadata.PropertyName %>');

    </script>

    <%: Html.EditorFor(m=> m.ContentDescription,"CkEditor") %>

    因为该模版不是针对具体类型的,所以Inherits的类型只能是

    ViewUserControl<dynamic>或ViewUserControl,示例中表较特殊的是元数据的

    应用,在脚本中通过元数据获取属性的名称。ViewData表示当前模型的实例,

    ModelMetadata表示元数据,PropertyName表示属性。

    2.按模版名应用模版

    Html.EditFor(model,模板名)

    6.4.3使用DisplayFor()显示视图

    Html.DisplayFor()和Html.EditorFor()类似,只不过必须在Shared文件夹

    下创建DisplayTemplates文件夹。

    1.按照类型应用模版

    2. 指定模版名

    说明:在ASP.NET 默认的安全性机制,在视图输出时,会将字符串中包含的

    HTML标记自动编码。如果不需要编码,可以使用Html.Raw()进行输出。

  • 相关阅读:
    Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
    Android开发指南(35) —— Toast Notifications
    Android开发指南(37) —— Data Backup
    Android开发指南(36) —— Search
    [转]闲话操作系统1
    [从架构到设计]第二回:对象的旅行对象和人,两个世界,一样情怀
    [Thinking]从赢在中国,思考博客园的商业化
    [你必须知道的.NET]目录导航
    070809
    [CLR团队公告]CLR基础研究团队纲领
  • 原文地址:https://www.cnblogs.com/xuzhen97/p/8866686.html
Copyright © 2020-2023  润新知