当前位置: 首页 > 编程日记 > 正文

ASP.NET MVC 5 - 视图

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML。

您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所引入的Razor视图引擎(Razor view engine)。Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优雅的方式来使用C#语言创建所要输出的HTML。用Razor编写一个视图模板文件时,将所需的字符和键盘敲击数量降到了最低,并实现了快速,流畅的编码工作流程。

当前在控制器类中的Index方法返回了一个硬编码的字符串。更改Index方法返回一个View对象,如下面的示例代码:

public ActionResult Index()
{
return View();
}

上面的Index方法使用一个视图模板来生成一个HTML返回给浏览器。控制器的方法(也被称为action method(操作方法) ),如上面的Index方法,一般返回一个ActionResult(或从ActionResult所继承的类型),而不是原始的类型,如字符串。

在该项目中,您可以使用的Index方法来添加一个视图模板。要做到这一点,在Views\HelloWorld 文件夹上,单击鼠标右键,然后单击“ 添加“,选择“MVC 5 View Page with (Layout Razor)

image

在”指定项名称(Specify Name for Item)对话框,输入“Index “,然后单击“确定”。

image

在“选择布局页(Select a Layout Page)”对话框中,接受缺省_Layout.cshtml”,并单击”确定“。

image

在上面的对话框中,左窗格中选择的是“ Views\Shared”共享文件夹布局。如果你在另一个文件夹中有一个自定义布局,你也可以选择它。稍后在本教程中,我们会谈论的布局文件。

您可以在解决方案资源管理器中看到MvcMovie\HelloWorld文件夹和已被创建的MvcMovie\View\HelloWorld\Index.cshtml文件:

image

添加下面的高亮标记代码。

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
Hello from our View Template!

在解决方案资源管理器,找到Index.cshtml文件,右键单击并选择“在浏览器中查看”。

页面检查器教程中会有更多的信息介绍这个工具。

image

同时,运行应用程序并在浏览器中浏览:HelloWorld控制器(http://localhost:xxxx/HelloWorld“)。在您控制器的Index方法中并没有做太多的工作,它只是执行了return View(),这个方法指定使用一个视图模板文件来Render返回给浏览器的HTML。因为您没有明确指定使用那个视图模板文件,ASP.NET MVC会默认使用\Views\HelloWorld文件夹下的Index.cshtml视图文件。下图显示了在视图文件中硬编码的字符串 "Hello from our View Template!"

image

看起来很不错吧。但是,请注意,浏览器的标题栏会显示为"Index- My ASP.NET Appli" 并且在页面顶部的大链接会显示为 "Application name.”。 取决于浏览器窗口的大小,您可能需要在右上角,单击“三条杠”,首页(Home),简介(About)联系(Contact), 注册(Register)和登录(Log in)的链接。

修改视图和布局页

首先,您想要修改在页面顶部的链接 "Application name"。这段文字是每个页面的公用文字,即使这段文字出现在每个页面上,但是实际上它仅保存在工程里的一个地方。在解决方案资源管理器里找到/Views/Shared文件夹,打开_Layout.cshtml文件。此文件被称为布局页面(Layout page),并且其它所有的子页面,都共享使用这个布局页面。

image

布局模版允许您在一个位置放置占位所需的 HTML 容器,然后将其应用到您网站中所有的网页布局。 查找 @RenderBody(). 您所创建的所有视图页面都被"包装" 在布局页面中来显示,RenderBody只是个占位符。例如,如果您点击“关于(About)”链接,Views\Home\About.cshtml 视图会在RenderBody方法内进行Render。

在布局模板页面内修改ActionLink内容, 把网站标题从 " Application name " 修改为 "MVC Movie”,并修改控制器参数从Home为Movies.

完整的布局文件如下所示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content=" initial-scale=1.0">
<title>@ViewBag.Title - Movie App</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("MVC Movie", "Index", "Movies", null, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@Html.Partial("_LoginPartial")
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
&copy; @DateTime.Now.Year - My ASP.NET Application
</footer>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>

运行应用程序,您会看到 "MVC Movie "。 单击“ 关于(About)链接,您可以看到该页面也会显示为"MVC Movie "。 我们可以在布局模版里再修改一次,使得网站里所有网页的标题都同时被修改掉。

image

打开创建的 Views\HelloWorld\Index.cshtml文件,可以找到如下代码:

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}

上面的 Razor 代码,显示的设置了布局页面。打开 Views\_ViewStart.cshtml 文件, 它也有同样的Razor 标记代码。Views\_ViewStart.cshtml 文件定义我们使用到的所有视图的通用布局,故你也可在Views\HelloWorld\Index.cshtml文件里面,注释或删除这些代码。

@*@{
Layout = "~/Views/Shared/_Layout.cshtml";
}*@
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
Hello from our View Template!

你可以使用Layout属性设置一个不同的布局页面,或者设置为null指明不使用布局文件

现在,让我们来修改Index视图:

打开MvcMovie\Views\HelloWorld\Index.cshtml文件,有两个地方需要进行修改:

・ 浏览器上的标题文字

・ 其次,二级标题文字 (<h2>元素)。

让它们稍有不同,这样就可以看出到底程序里那部分的代码被修改了。

@{
ViewBag.Title = "Movie List";
}
<h2>My Movie List</h2>
Hello from our View Template!

如果要指定HTML的title元素,上面的代码设置了ViewBag对象 (在Index.cshtml视图模板中) 的Title属性。如果您回去看看布局模板的源代码,您会发现该模板会输出此值倒<title>元素中,从而作为我们之前修改过的 HTML <head>里的一部分。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content=" initial-scale=1.0">
<title>@ViewBag.Title - Movie App</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>

使用此ViewBag方法,您可以轻松地从视图模板传递其它参数给布局模板页面。

运行应用程序,浏览http://localhost:xx/HelloWorld。 浏览器的标题、 主标题和二级标题都已经被修改了。(如果您在浏览器中看不到修改,有可能是页面被缓存了。按 Ctrl + F5 强制浏览器重新请求并加载服务器返回的HTML) 在Index.cshtml视图模版中设置的ViewBag.Title 输出了浏览器的标题,附加的"- Movie App"是在布局模板文件中添加的。

此外还要注意Index.cshtml视图模板中的内容是如何合并到_Layout.cshtml模板,从而形成一个完整的HTML返回到客户端浏览器的。使用布局模板页面,可以很容易进行一个修改并应用到所有页面。

image

我们这一点(在本例中的"Hello from our View Template!"字符串) 的"数据" 只是一段硬编码。这个MVC 应用程序有了一个"V"(视图),也有了一个"C"(控制器),但还没有"M"(模型)。不过稍后,我们将介绍如何创建一个数据库并检索数据模型。

视图是数据的展示方式,掌握这部分知识才能更好的用于MVC的开发。同时,还可以借助一些开发工具来帮助开发过程。ComponentOne Studio ASP.NET MVC 这款轻量级控件能与Visual Studio无缝集成,完全与MVC6和ASP.NET 5.0兼容,将大幅提高开发效率。

转载于:https://my.oschina.net/powertoolsteam/blog/278329

相关文章:

java内存泄漏问题排查

背景&#xff1a;程序部署在客户机器上&#xff0c;不定期异常崩溃&#xff0c;且无日错误异常日志记录。 day1&#xff1a;初步排查是内存问题导致的&#xff0c;考虑使用分析工具记录分析。另外代码review仔细排查&#xff0c;怀疑有可能跟大量网络socket没有释放有关。 程序…

的正确使用_弹力袜的正确使用

何为弹力袜&#xff1f;弹力袜是预防下肢静脉疾病的重要措施&#xff0c;其设计上远心端压力大&#xff0c;近心端压力小。医用循序减压弹力袜在脚踝部建立最高支撑压力&#xff0c;顺着腿部向上逐渐递减&#xff0c;在小腿肚减到最大压力值的70%-90%,在大腿处减到最大压力值的…

yii2的安装

yii2也是依赖于composer, 就像laravel, 所以先安装composer, 如果安装不上composer可以看laravel安装的文章. 安装好composer之后安装一个插件 composer global require "fxp/composer-asset-plugin:1.0.0"或composer global require "fxp/composer-asset-plugi…

eclipse new server Cannot create a server using the selected type 网上有两种办法,其实原理一样...

eclipse new server Cannot create a server using the selected type 网上有两种办法&#xff0c;其实原理一样第一种说法&#xff1a;还真的找到解决的方法了,如下:1.退出eclipse2.到[工程目录下]/.metadata/.plugins/org.eclipse.core.runtime3.把org.eclipse.wst.server.co…

代码示例_网络编程_select

select_多路复用 1.头文件 1 #pragma once2 3 #include <stdio.h>4 #include <stdlib.h>5 #include <sys/types.h>6 #include <sys/select.h>7 #include <sys/time.h>8 #include <sys/socket.h>9 #include <strings.h> 10 #include …

LTE中基本通信过程的理解——上行调度

上行调度1. UE向ENB请求上行资源Physical channel: PUCCHMessage: SR (schedule request)根据上层的配置UE按照一定的周期和子帧位置上通过PUCCH中的控制消息UCI传输SR【RACH成功之后&#xff0c;ENB配置UE的SR子帧位置和发送周期&#xff0c;如果接入UE过多周期就长&#xff0…

qrcode生产带logo_“白板”口罩打上LOGO装名牌 警方重拳出击清市场

看看新闻Knews记者 毛鸿仁2020-09-17 10:19假冒口罩危害大&#xff0c;无良商家被查处。近日&#xff0c;上海松江警方侦破了一起假冒品牌口罩的案件&#xff0c;犯罪嫌疑人赵某等人被松江警方依法采取刑事强制措施。7月下旬&#xff0c;上海市公安局松江分局通过警企协作&…

Tomcat 服务器的端口号的修改

在系统中找到Tomcat安装目录下的conf文件夹下的servlet.xml文件。 &#xff08;1&#xff09;在servlet.xml文件中找到以下代码&#xff1a; <connector port"8080" protocol"HTTP/1.1" connectionTimeout"20000" redirectPort"8443&q…

js获取宽度设置thickbox百分比

thickbox的宽高不好设为百分比&#xff0c;这样遇到不同的尺寸的电脑就会出现问题。 怎么做呢&#xff1f; 通过js来处理。 <script type"text/javascript">$(function(){var width window.screen.width;//通用&#xff0c;各浏览器都支持获取宽度width widt…

【算法总结】数学问题-最大公约数和最小公倍数

【算法总结】最大公约数和最小公倍数 一、最大公约数&#xff08;GCD&#xff1a;greatest common divisor&#xff09; 欧几里得算法&#xff1a; 若 a、b 全为零则它们的最大公约数不存在&#xff1b;若 a、b 其中之一为零&#xff0c;则它们的最大公约数为 a、b 中非零的那个…

javascript 手势缩放 旋转 拖动支持:hammer.js

原文&#xff1a; https://cdn.rawgit.com/hammerjs/hammer.js/master/tests/manual/visual.html /*! Hammer.JS - v2.0.4 - 2014-09-28* http://hammerjs.github.io/** Copyright (c) 2014 Jorik Tangelder;* Licensed under the MIT license */ (function(window, document, …

探测参考信号(Sounding Reference Signal)

SRS是探测参考信号的缩写&#xff0c;所谓参考信号&#xff0c;那么是为谁提供参考&#xff1f;参考的指标是什么&#xff1f;答案是为eNodeB的调度提供参考&#xff0c;参考的内容是为上行信道质量做参考。那么为什么需要SRS呢&#xff1f;众所周知&#xff0c;在LTE网络中&am…

机器人瓦力船长机器人_警察“瓦力”来啦!机器人巡逻南京路 这样的它你喜欢吗?...

电影“瓦力”中的机器人主角瓦力让人印象深刻&#xff0c;这两天&#xff0c;一台形似瓦力的机器人出现在了南京路步行街上&#xff0c;一下子就成为了这条街上“最靓的仔”&#xff0c;实际上&#xff0c;它是一台功能强大的警用巡逻机器人。“我正在南京路步行街执行巡逻任务…

转 mac svn用法

mac svn 删除.svn隐藏文件的命令 打开终端,进到所在的目录,然后出入一下代码 find . -name ".svn" | xargs rm -Rf 1、将文件checkout到本地目录svn checkout path&#xff08;path是服务器上的目录&#xff09;例如&#xff1a;svn checkout svn://192.168.1.1/pro/…

MySQL图形处理软件Navicat字体配置(乱码解决)

设置字体 1.常规 Noto Sans Mono CJK TC Regular 2.编辑器 Noto Sans CJK SC Regular 3.记录 Noto Sans Mono CJK TC Regular 转载于:https://www.cnblogs.com/jrri/p/11075040.html

Corn Fields(POJ 3254状压dp)

题意: n*m网格1能放0不能放 放的格子不能相邻 求一共多少种可放的方案。 分析&#xff1a; dp[i][j]第i行可行状态j的的最大方案数&#xff0c;枚举当前行和前一行的所有状态转移就行了&#xff08;不放牛也算一种情况&#xff09; #include <map> #include <set> …

批量关闭公众号推送_微信推出“一键拒收”长期未读公众号推送功能

近期已经写了不少关于微信的消息了&#xff0c;本来想换个话题休息一下&#xff0c;谁知道微信不休息啊&#xff0c;又开始内测了。7月25日&#xff0c;部分iOS内测微信用户会收到系统对长时间未读订阅号的提醒&#xff0c;并可通过提醒入口选择不接收这部分订阅号的群发消息推…

如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN

如何用BIND, GeoIP, Nginx, Varnish来创建你自己的高效的CDN网络&#xff1f;CDN&#xff0c;意思是Content Distrubtion Network&#xff0c;意思是内容分发网络&#xff0c;简单的说&#xff0c;就是全地域范围内的负载均衡&#xff0c;全地域的概念可以是全国&#xff0c;也…

Asp.Net Core 入门(一)——Program.cs做了什么

ASP.NET Core 是微软推出的一种全新的跨平台开源 .NET 框架&#xff0c;用于在 Windows、Mac 或 Linux 上生成基于云的新式 Web 应用程序。国内目前关于Asp.Net Core的书比较少&#xff0c;自己靠着阅读微软官方文档&#xff0c;源码和在52ABP梁老师的教程中慢慢的在一点点的积…

LTE MIBSIB1

LTE MIB/SIB1 LTE MIB/SIB 消息可以参考&#xff1a;http://blog.csdn.net/wowricky/article/details/51348613 UE 接受完MIB/SIB1后就可以判断这个CELL是否可以驻留&#xff0c;这里仅仅讨论与驻留 (Camp on)相关的参数。 1. MIB 包含BW/PHICH/SFN 2. SIB1 包含小区接入信…

python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

大数据文摘授权转载自数据派THU作者&#xff1a;MOHD SANAD ZAKI RIZVI本文主要介绍了&#xff1a;TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习模型&#xff0c;而无需任何复杂的安装步骤。TensorFlow.js的两个组件——Core API和Layer API。了解…

mySQL笔记(1)

1.show databases; 显示所有数据库 2.create database 数据库名 [其他选项]&#xff1b; 新建数据库 例&#xff1a;create database example_db character set gbk; 创建了一个名为example_db的数据库&#xff0c;并将数据库字符编码指定为gbk,便于在命令提示符下显…

Loadrunner进行md5加密方法

本文主要介绍使用Loadrunner进行字符串md5加密的方法。 使用Loadrunner进行md5比较简单&#xff0c;首先是加载md5.h头文件&#xff0c;后使用头文件中的加密函数即可。 1. md5.h头文件内容如下 #ifndef MD5_H #define MD5_H #ifdef __alpha typedef unsigned int uint32; #els…

6 Java Shell排序

希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序&#xff0c;待整个序列中的记录“基本有序”时&#xff0c;再对全体记录进行依次直接插入排序。 1、基本思想 将待排序数组按照步长gap进行分组&#xff0c;然后将每组的元素利用直接插入排序的方法…

如何向非技术人员解释“稀疏傅里叶变换”算法?

【伯乐在线导读】&#xff1a;这个问题来自 Quora&#xff0c;下面是来自 Tanooj Luthra 的回复。 让我们来演奏一架想象中的钢琴。 钢琴的每个琴键都对应一个特定频率的声音。例如&#xff0c;一个比较有名的频率是国际标准音A&#xff08;440赫兹&#xff09;。当有琴键按下时…

N皇后摆放问题

Description 在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。你的任务是&#xff0c;对于给定的N&#xff0c;求出有多少种合法的放置方法。 Inp…

java线程的优先级是数字越大优先级越高_《深入理解Java虚拟机》5分钟速成:12章(Java内存模型与线程)...

第12章 Java内存模型与线程前言&#xff1a;1、物理机如何处理并发问题&#xff1f;2、什么是Java内存模型&#xff1f;3、原子性、可见性、有序性的具体含义和应用实现&#xff1f;4、volatile 关键字特性&#xff1f;5、基于volatile变量的运算在并发下是否是线程安全的&…

动软代码生成V2.74模版简介

最近发现很多人用动软代码生成&#xff0c;确实方便&#xff0c;有些经验记录下&#xff0c;以后查看回顾。 ..\Maticsoft\Codematic2\Template\TemplateFile 为模板文件夹&#xff0c;直接在目录下新建文件夹【我的自定义模版】,有个【模版示例.cmt】也直接复制到自定义文件下…

《少年先疯队》第九次团队作业:Beta冲刺第二天

2.1 今日完成任务情况 姚玉婷&#xff1a;房间管理功能测试文档的编写马丽莎&#xff1a;酒店系统中商品管理功能的完善张 琼&#xff1a;商品管理功能的测试孙苗坤&#xff1a;商品管理功能的测试2.2 明天任务安排 姚玉婷&#xff1a;酒店系统中剩余功能的完善马丽莎&#x…