当前位置: 代码网 > it编程>编程语言>Asp.net > ASP.NET Core MVC中的视图(Views)

ASP.NET Core MVC中的视图(Views)

2024年05月18日 Asp.net 我要评论
asp.net core mvc 控制器可以使用视图返回格式化的结果。1.什么是视图在 mvc 中,视图封装了用户与应用交互呈现细节。视图是具有生成要发送到客户端内容的,包含嵌入代码的html模板。视

asp.net core mvc 控制器可以使用视图返回格式化的结果。

1.什么是视图

在 mvc 中,视图封装了用户与应用交互呈现细节。视图是具有生成要发送到客户端内容的,包含嵌入代码的html模板。视图使用使用 razor 语法,该语法允许以最少的代码或复杂度与 html 进行交互。

asp.net core mvc 视图默认以 .cshtml 文件保存在应用程序的 views 文件夹里面。通常,每个控制器都有自己的文件夹,其中包含对应控制器操作方法的视图。

除了对应操作的视图,局部视图,布局以及其他特定视图文件可以用来减少重复,并允许在视图中重复使用。

视图在 mvc 应用程序中提供了关注的分离,将用户界面级标记与业务逻辑分开封装。通常,可以通过 布局与共享指令<layout>或布局视图<partial>对应的用户界面中重复使用。

2.创建视图

属于某个控制器的视图创建在 views/[controllername] 文件夹下。在控制器之间公用的视图则放在 /views/shared 文件夹下。将视图命名为与其关联的控制器操作一样的名字,并添加 .cshtml  扩展名。例如,为home 控制器的 about 操作创建一个视图,则应在 /views/home 文件夹下创建一个 about.cshtml 文件,或者在操作方法上右键点击添加视图:

@{
    viewdata["title"] = "about";
}
<h2>@viewdata["title"]</h2>
<h3>@viewdata["message"]</h3>

<p>use this area to provide additional information.</p>

@ 符号代表 razor 代码。c# 语法在 { } 包裹的 razor 代码块中运行,razor 可以通过运用 @ 符号对值进行操作,从而在html中显示,就像上面 <h2> 和 <h3> 元素里面展示的那样。

这个视图只关心由它负责的这部分输出。而页面布局的部分,以及视图中的通用外观,在别的地方指定。

3.控制器指定视图

 视图通常作为 viewresult 从操作返回。操作方法可以直接创建和返回一个 viewresult ,但一般,如果控制器继承自 controller ,则只需使用 view 辅助方法即可:

public iactionresult about()
        {
            viewdata["message"] = "your application description page.";

            return view();
        }

view 的辅助方法有多个重载,以便于返回视图。可以有选择性地指定一个返回的视图,还可以给视图返回一个模型对象。

当操作返回视图时,将发生称为视图发现的过程。此过程将确定使用哪个视图文件。除非指定了特定的视图文件,否则运行时首先查找控制器对应的视图,然后在 share 文件夹中查找匹配的视图名称。

当操作返回 view 方法时,比如 return view(); 这个操作的名字则被用作视图名称。也可以给这个方法床底一个明确的视图名称 return view("someview"); 。这两种情况视图都会在对应控制器的视图文件夹和share文件夹搜索匹配的文件。

可以提供视图文件的路径,在这种情况下, .cshtml  扩展名必须指定为文件路径的一部分,return view(“views/home/about.cshtml ”);

4.给视图传递数据

asp.net core mvc 可以使用多种机制给视图传递数据。最健壮的方式是在视图中指定一个模型类型(通常称为视图模型,以区别于业务领域的模型类型),然后将此类型的实例从操作传递到视图。建议使用模型或视图模型将数据传递到视图。这允许视图利用强类型检查,可以使用 @model 指令为视图指定模型:

@model mvctest.models.operation

@{
    viewdata["title"] = "create";
}

<h2>create</h2>

<h4>operation</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="create">
            <div asp-validation-summary="modelonly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="id" class="control-label"></label>
                <input asp-for="id" class="form-control" />
                <span asp-validation-for="id" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="name" class="control-label"></label>
                <input asp-for="name" class="form-control" />
                <span asp-validation-for="name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="create" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="index">back to list</a>
</div>

一旦为视图指定了模型,就可以使用 @model 以强类型方式访问发送到视图的实例。(@model.name)上面使用的标签助手。控制器向视图提供实例:

public actionresult create()
        {
            var model = new operation()
            {
                id=1,
                name="test"
            };
            return view(model);
        }

对于可以作为模型提供给视图的类型没有限制,建议传递具有很少或没有行为的视图模型,以便将业务逻辑封装在应用程序的其他位置。

1.弱类型数据

 除了强类型视图之外,所有视图都可以访问弱类型的数据集合。此集合可以通过控制器和视图上的 viewdata 或 viewbag 属性进行引用。viewbag 属于  viewdata 的一个包装器,它提供了该集合的动态视图,它不是一个单独的集合。

viewdata 是通过字符串键访问的字典对象,可以在其中存储和检索对象。当提取对象时,需要将它们转化为特定类型。可以使用 viewdata 将数据从控制器传递到视图,以及在视图(局部视图和布局)中传递。字符串可以直接存储和使用,不需要转化:

public iactionresult about()
        {
            var model = new operation()
            {
                id=1,
                name="test"
            };
            viewdata["operation"]  = model ;
            
            viewdata["message"] = "your application description page.";

            return view();
        }

视图:

@{
    viewdata["title"] = "about";
    //需要转化
    var operation = viewdata["operation"]  as operation ;
}
<h2>@viewdata["title"]</h2>
<h3>@viewdata["message"]</h3>
<h3>@operation.id</h3>
<h3>@operation.name</h3>
<p>use this area to provide additional information.</p>

viewbag 对象提供对存储在 viewdata 中的对象的动态访问,这样可以更方便的使用,因为不需要转换:

@{
    viewdata["title"] = "about";

}
<h2>@viewdata["title"]</h2>
<h3>@viewdata["message"]</h3>
<h3>@viewbag.operation.id</h3>
<h3>@viewbag.operation.name</h3>
<p>use this area to provide additional information.</p>

由于两者都指向相同的底层 viewdata 集合,因此如果方便,可以在读取和写入值时,在 viewbag 和 viewdata 之间可以混合使用。

2.动态视图

 不声明类型,但具有传递给它们的模型实例的视图可以动态引用此实例。但不提供任何编译保护或 intellisense 。如果属性不存在,则页面将在运行时出错。

5.更多视图特性

标签助手可以轻松地将服务器端行为添加到现有地 html 标签中,从而避免在视图中使用自定义代码或助手代码。

生成自定义 html 标记可以使用许多内置地 html 助手来实现,更复杂地 ui 逻辑(可能具有自己地数据需求)可以封装在视图组件(view components)中。视图组件提供了与控制器和视图提供的相同的关注点,并且可以消除对于处理由常见ui 元素使用数据的动作和视图的需要。

视图页支持依赖注入,允许服务注入到视图。

到此这篇关于asp.net core mvc视图的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持代码网。

(0)

相关文章:

  • ASP.NET Core中的Configuration配置二

    相关文章asp.net core2.2 中的configuration配置一asp.net core2.2 中的configuration配置二1.内存配置memoryconfig…

    2024年05月18日 编程语言
  • ADO.NET基础知识详解

    ado.net是微软提供的一种数据库访问技术。ado.net为不同类型的数据源提供了不同的数据提供程序对象:数据提供程序说明sql server 数据提供程序提供对microsof…

    2024年05月18日 编程语言
  • ASP.NET Core中的Configuration配置一

    相关文章asp.net core2.2 中的configuration配置一asp.net core2.2 中的configuration配置二1.前言asp.net core在应…

    2024年05月18日 编程语言
  • .NET设计模式之UML类图介绍

    一、概述uml类图用来定义系统中的类,包括描述类的结构和类之间的关系。类图的主要作用于描述系统的静态结构。类图的基本模型元素如下:我们可以看到,一个类图表示为长方形,分为3部分,最…

    2024年05月18日 编程语言
  • ASP.NET Core中的环境配置

    1.环境变量配置asp.net core在应用程序启动时读取环境变量(propertieslaunchsettings.json)aspnetcore_environment,并将…

    2024年05月18日 编程语言
  • ASP.NET中使用用户控件

    ASP.NET中使用用户控件

    一、概述:与web窗体页相同,程序员可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件。此外,与web窗体页一样,用户控件可以在第一次请求时被编... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com