开发者网络

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 72|回复: 0

C# Asp.net Core MVC网站应用入门

[复制链接]

1

主题

2

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-3-21 08:51:04 | 显示全部楼层 |阅读模式
前言

本次内容使用VS2002+.NET6.0调试。
<hr/>项目创建

首先启动VS2002,创建新项目。如下图:


搜索“web”,选择“http://ASP.NET Core Web应用(模型-视图-控制器),也简称MVC,即对应的Model-View-Controller的英文单词缩写。如下图:


填写项目名称,选择项目存放在本地电脑的目录,如下图:


然后按默认设置即可。其中“启用Docker”项,可先不勾选,这个需要另外安装“Desktop Docker”环境,以后也可以更改此项设置,可以留到需要的时候再重新配置上。按默认创建,如下图:


VS会在你指定的电脑位置,建立项目文件夹和文件。在项目的下面,有以下文档目录或文档,如下图:


我们先运行程序,如下图:


VS会另外加载控制台程序,然后再调用浏览器显示网页。如下列图:






https://localhost:7070即为网站的首页地址,Localhost,本地服务器,意思是这是调试用的服务器,外网访问不到的。“7070”称为端口,不同的调试时间或环境下,可能会不一样。如果不写,就是浏览网页服务默认的端口号都是80。网址一般都不区分大小写。
早期的网站,网页路径都有相应的网页文件与之对应。比如,“https://localhost:7070/”(或“https://localhost:7070”,省略网站根目录标识符),就会存在“https://localhost:7070/index.html”的文件。
但在MVC网页,却不是这样。比如在项目设计时,就有“Index.cshtml”作为首页文档,如下图:


但在生成项目发布后,你使用“https://localhost:7070/Index.cshtml”的网络路径去访问,就会被拒绝,因为网络上不存在这个文档,如下图:


<hr/>MVC控制器及其方法

为了讲解该原理,实践一下。
<hr/>Privacy超链接

在首页点击网页超链接标签上的“Privacy”文字,浏览器会跳转到Privacy地址,如下图:




跳转后的“/Home/Privacy”即为网页路径。
我们看一下其过程代码。
这个定义的出处在“_Layout.cshtml”文档中,如下列图:




至于为什么是在这个文档里定义,先不做论述。
“Privacy”a标签是超链接标签,一般在html网页中,都会直接跳转到相同网站的其它网页文档或外部网站的网页。但MVC网页在这里是这样处理,把“Privacy”标签的两个属性值(asp-controller="Home" asp-action="Privacy"),传给“Home”控制器的“Privacy”方法(控制方法),由控制方法Privacy去处理这次网页点击的操作。下图:


这里的类名是“HomeController”,这个类名的写法有规定,即“Controller”必须一字不差的写在后面,前面才是名副其实的名称“Home”。
IActionResult是返回类型,有的MVC版本是“ActionResult”。Index、Privacy都是方法名称,返回类类型为IActionResult。这里的方法,必须有相应的视图与之对应,可以在VIEW文件夹中找到Index.cshtml和Privacy.cshtml文档,即控制方法名必须与视图名一一对应。再与超链接中的属性名对应,就实现了MVC超链接跳转的独特的处理方法。
return View():就是返回视图(网页)的意思,当然这里的View也与Privacy.cshtml定义的网页相对应。
那流程就是点击“Privacy”这个链接,提交了两个参数Home和Privacy,就等于提交访问请求给网站控制器Home,网站控制器调用控制方法Privacy,Privacy方法预定的反应结果是return View(),就返回Privacy.cshtml这个网页视图(内容),然后浏览器就会加载这个视图(网页)。
再仔细观察网址的变化:网址更换为“https://localhost:7070/Home/Privacy”,很明显“Home”就是控制器名称,“Privacy”就是HomeController类中的方法“Privacy”的名称,这就把网页路径和方法路径绑定了起来。如果你在浏览器中输入“https://localhost:7070/Home/Privacy”并回车运行,那效果是和上面的点击跳转方法是一样的。意味着用户访问这个网站上的网页路径“/Home/Privacy”,服务器就把这个请求提交给Home控制器中的Privacy方法处理。
由此看来MVC的网页路径一般就是两层,即“控制器名称/控制方法名”。
<hr/>跳转外部网页

当然,如果把“Privacy”标签改为比如传统的HTML标签:
<a href="https://www.baidu.com">Home</a>点击后就是直接跳转外部网页,离开本网站了。如下图:


也可以上面改回来,“Privacy”标签还是指向控制器的方法,而在方法里代码改为以下,效果还是一样的:
public IActionResult Privacy()
{
    return Redirect("http://www.baidu.com");
}

<hr/>重定向

在解决方案管理器中,在如下位置增加新的视图文件,如下列图:






VS会在如下位置添加了MyIndex.cshtml文档,如下图:


双击打开该文件,里面的代码如下图:


把全部代码删除改为以下代码:
<H1>我的视图</H1>
<div>其实就是我的网页</div>由于视图需要相应的控制器方法名对应,所以我们需要在HomeController文档中添加对MyIndex视图的控制方法MyIndex,添加并改动里面的代码:
                public IActionResult Privacy()
                {
                        string ActionName = "MyIndex"; string ControllerName = "Home";
                        return RedirectToAction(ActionName, ControllerName);
                }
                public IActionResult MyIndex()
                {
                        return View();
                }如下位置:


这里RedirectToAction的字面理解就是再次定向到动作,参数ActionName是控制方法名,ControllerName是控制方法所在的类名(省略“Controller”)。
先看一下效果,再次运行调试程序,点击“Privacy”,效果如下图:


这样,点击网页标签“Privacy”超链接标签,就会访问Home控制器的名称,再访问其中的方法Privacy。因为Privacy方法中,返回的是RedirectToAction(ActionName, ControllerName),即跳转到“MyIndex”这个(Action)方法,而MyIndex方法,返回View视图,而这个View是和方法MyIndex绑定的是MyIndex.cshtml网页文件,那程序就会去解析MyIndex.cshtml这个视图文件,生成网页内容返回给浏览器,然后浏览器把其呈现给用户。
再次改一下代码测试:
                public IActionResult Privacy()
                {
                        return MyIndex();
                }
                public IActionResult MyIndex()
                {
                        return View();
                }按理说Privacy方法调用MyIndex方法,按方法互相调用的原理,而MyIndex方法返回MyIndex的网页,因此Privacy应该返回MyIndex的网页,实际上还是停留在Privacy对应的网页。这是因为Privacy没有重定向到MyIndex的原因吧。
MVC网页加载和跳转原理

可以这样理解,在本次程序运行中,在浏览器中输入网址:https://localhost:7070/,由于是没指定网页路径,按互联网惯例,就是要访问网站的首页。本例中,程序定义网站的首页指定名称为Index,其所在的控制开关在Home,方法名为Index,因此就提交给HomeController模块对应的函数Index处理,而Index方法返回View,那就加载Index对应的View(Index.cshtml),返回网页内容给浏览器,浏览器呈现页面内容。
在本案例中,MVC把HTML的“a”标签改造为访问网站程序中的某种方法。这种HTML和C#糅合在一起的网页代码,只能由网站服务器先进行解析,再生成网页代码了。未来.NET会不会把HTML代码都C#代码化,这不重要,只要生成标准化的网页返回给用户就行了。)
这个思路就表明,用户通过浏览器输入网址,浏览器把网址提交给网页所在的服务器,请求返回网页内容(或数据),再返回给用户。服务器程序会调用相应的方法,再把网页视图或直接数据返回给浏览器,浏览器再加载网页或打印数据。
MVC网页响应的方法是,将网页路径转换为程序中的控制方法,调用这种方法处理后再作返回响应。所以,用户提交的网页路径,就必须和控制器名和方法名相对应,不然就无法得到正确的响应。当然,如果你喜欢把网页直接设置为HTML页的话,就不用经过这样处理了。那用户就可以直接指定网页文件所在网址了。比如:“https://localhost:7070/HtmlPage.html"。比如下图:


结语

MVC网页主要有3个模块:M-Model(模型)、V-View(视图)、C-Controller(控制器),Model和Controller是cs特征,而View是cshtml特征。而Controller是核心层,网页访问入口都是Controller控制器的方法,通过控制器里面的方法处理跳转、生成视图、或处理数据请求返回数据。这样的处理方法会以往的.net网页处理方式更更高效,当然入门就没有那么直接了,理解会难一些。编程都是如此,高效的方法往往都是嵌套和互相调用的模块化,思路比较复杂化,但使用起来方便高效。
MVC体现了模块化编程的特征,其编写有相当的约定,要求各模块之间,共同操作对象的名称都要统一。把Controller控制器理解为网页请求和响应请求之间的控制器,把View视图理解为网页呈现内容,这样更明了。Model模型暂且不作论述。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|开发者网络

GMT+8, 2025-6-8 10:49 , Processed in 0.080942 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表