ASP.NET MVC3学习--视图和模型(1)

本文深入探讨了ASP.NET MVC框架中视图如何与模型交互,包括视图数据的获取、强类型视图的应用、视图模型的使用以及视图的指定与渲染过程。

视图   

视图的作用


    视图的职责是向用户提供用户界面,向它提供对模型的引用后,它会将模型转换为准备提供给用户的格式.


    在ASP.NET MVC中这个过程由两部分组成:


    检查控制器提交的ViewDataDictionary(通过ViewData属性访问),另一部分是将其内容转换为HTML格式

    从ASP.NET MVC 3开始,视图数据可以通过ViewBag属性访问,该属性是动态的,语法简单,可以访问通过ViewData属性访

 

问的相同数据.封装了ViewData,因此可以用类似访问属性的语法来检索字典中的值,如:


    ViewBag.Message等同于ViewData[“Message”]


    两者的差异:1、只有当要访问的关键字是一个有效的C#标识符时,ViewBag才其作用


    如:在ViewBag[“Key With Spaces”]中存放一个值,那么将不能使用ViewBag访问改值

    2、该动态值不能作为一个参数传递给扩展的方法,因为C#编译器为了选择正确的扩展方法,在编译时必须知道每个参数的类型.


    如:

@Html.TextBox("name",ViewBag.Name)

 

会编译失败,如果想编译通过有两种方法1、使用ViewData["Name"],2、(string)ViewBag.Name

    在强类型视图中,ViewDataDictionary拥有一个视图渲染的强类型模型对象,该模型可能代表了实际的域对象,为方便起见,

 

该模型对象可以通过视图的Model属性进行引用.
   

@{
      Layout=null;
    }
    <h1>@ViewBag.Message</h1>


 

    控制器中的控制行为:

 

Public ActionResult Sample(){
      ViewBag.Message="Hello World";
      Return View("Sample");
    }



        注意:该控制器将ViewBag.Message属性设置为一个字符串,然后返回一个名为Sample的视图,该视图将显示传递给

 

ViewBag.Message属性的值


    指定视图


    默认情况下在控制器中的操作方法返回的View()视图即与控制器名去掉Controller同名的视图,如果需要向其指定不同的

 

视图则需在View("OtherView")中指定要返回的视图名称即可
   

在一些情况下需要指定完全位于不同的目录结构中的视图,这时可以用带有~符号的语法来提供视图的完整路径,如:
    

Public ActionResult Index()
    {
    ViewBag.Message=“Hello World”;
    Return View(“~/Views/Example/Index.cshtml”);
    }


 

    强类型视图


    例:编写一个显示Album列表的视图,实现如下:
    

Public ActionResult List()
    {
    Var ablums=new List<Album>();
    For(int i=0;i<5;i++)
    {
    albums.Add(new Album{ Title=“Olive”+i});
    }
    ViewBag.Albums=albums;
    Return View(albums);
    }


 

    在视图中显示如下:
   

 <ul>
    @foreach(var a in (ViewBag.Albums as IEnumerable<Album>))
    {
    <li>@a.Title</li>
    }
    </ul>


 

    但是在强类型视图中,可以这样实现:
    

Public ActionResult List()
    {
    Var ablums=new List<Album>();
    For(int i=0;i<5;i++)
    {
    albums.Add(new Album{ Title="Olive"+i});
    }
    Return View(albums);
    }


 

    视图中:

@model IEnumerable<MvcMusicStore.Models.Album>
    <ul>
    @foreach(var p in Model)
    {
    <li>@p.Title</li>
    }
    </ul>



        视图模型


    视图通常需要显示各种没有直接映射到域模型的数据,可以通过编写自定义的视图模型类来实现


 添加视图


    lScaffold Template


    ① Empty 创建一个空视图,使用@model语法指定模型类型


    ② Create 创建一个视图,其中带有创建模型新实例的表单,并为模型类型的每一个属性生成一个标签和编辑器
   

   ③ Delete 创建一个是视图,其中带有删除现有模型实例的表单,并为模型的每一个属性显示一个标签以及当前该属性的值
  

    ④ Details 创建一个视图,显示了模型类型的每一个属性的标签及相应值

    ⑤ Edit 创建一个视图,并带有编辑现有模型实例的表单,并未模型类型的每一个属性生成一个标签和编辑器
  

   ⑥ List 创建一个带有模型实例的表单,为模型 类型的每一个属性生成一列,确保操作方法向视图传递的是

 

IEnumerable<OliveType>类型,同时为执行创建/编辑/删除操作,视图还包含了指向操作的链接
   

 

 l Reference script libiaries:指示创建的视图是否包含指向Javascript的文件集,当创建Create或Edit视图时,就需要选中这些

项,如果实现客户端的验证也必须选中这些项


    Razor视图引擎


    代码表达式


    例:@{ string root=“Olive”;}


    <span>@root.Models</span>


    想要输出结果为<span>Olive.Models</span>


    但是在实际的运行中会报错,提示string没有Models的属性,可以通过将表达式用圆括号括起来的方式进行解决,即:
  

  <span>@(root).Models</span>


    例:<li>Item_@item.Length</li>


    期望的输出结果为<li>Item_3</li>


    但是实际输出的是<li>Item_@item.Length</li>


    出现这样的情况是因为Razor将其识别为邮箱地址了,


    我们只需加上圆括号即可,如:<li>Item_@(item.Length)</li>


    此外如下想要输出@号,可以使用两个@@用来转义


    Html编码


    在许多情况下需要用视图显示用户的输入,但是这样存在潜在的跨站脚本攻击,但是Razor表达式默认用HTML编码
   

 如下:

@{string message=“<scritp>alert('Olive')</script>”;}
    <span>message</span>


 

    这段代码则不会弹出提示框,显示如下:
  

  <span><script>alert('Olive');<script></span>


 

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值