如何利用视频网站做数字营销推广,深圳开发app的公司有哪些,品牌网站建设权威,手机网站的必要性这是《完全透彻了解一个asp.net core MVC项目模板》的第二篇#xff0c;如果你直接进入了本篇博文而不知道上下文#xff0c;请先阅读《完全透彻了解一个asp.net core MVC项目模板》的第一篇。 文章目录 一、补充几个问题1、有关导航链接和Tag Helper2、_ViewStart.cshtml与…这是《完全透彻了解一个asp.net core MVC项目模板》的第二篇如果你直接进入了本篇博文而不知道上下文请先阅读《完全透彻了解一个asp.net core MVC项目模板》的第一篇。 文章目录 一、补充几个问题1、有关导航链接和Tag Helper2、_ViewStart.cshtml与视图引擎加载过程 二、model的建立和使用1、Error.cshtml2、ErrorViewModel.cs 三、来一个自己的页面1、建立模型文件2、建立视图页面关于Html.DisplayFor关于Html.ActionLink 3、建立控制器有可能遇到的问题a、在layout文件中增加一个链接 原文出处 https://haigear.blog.csdn.net/article/details/143316084 一、补充几个问题
1、有关导航链接和Tag Helper
我们在views/share文件夹下看到有两个文件_ViewStart.cshtml、_ViewImports.cshtml和貌似什么都没有写就几行引用库文件的代码尤其第二个文件中有这么一句话
addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers这句话相当的有作用否则你的导航就不灵了。原因是TagHelper起到了特别的作用下面我们来介绍一下它的作用。
Tag Helper的基本原理 Tag Helpers是ASP.NET Core中的一个强大特性它允许你在HTML元素上使用自定义属性来生成服务器端代码。addTagHelper是在服务配置中用于注册Tag Helper的方法它使得相关的HTML元素能够被“增强”。以asp - controller和asp - action属性为例当你在HTML a标签上使用这些属性如a asp - controllerHome asp - actionIndexHome/a如果没有注册相应的Tag Helper这些属性就只是普通的自定义属性浏览器不会理解它们的特殊用途。 Tag Helper对路由的利用 当addTagHelper注册了相关的Tag Helper例如Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper用于a标签后在服务器端渲染视图时Tag Helper会介入。它会读取a标签上的asp - controller和asp - action属性。然后根据ASP.NET Core的路由系统它会将这些属性值转换为一个有效的URL路径。路由系统会查找Program.cs或Startup.cs中定义的路由规则如app.MapControllerRoute根据asp - controller控制器名称和asp - action动作名称来生成一个指向正确控制器动作的链接。 与HTML的对比 如果没有Tag Helpera标签就会按照HTML的标准行为进行处理。HTML标准规定a标签的href属性用于指定链接的目标URL。当没有href属性只有文本内容时浏览器会将其视为普通文本而不会将其识别为一个可以点击的链接。Tag Helper实际上是在服务器端为a标签动态地生成了一个合适的href属性或者以其他符合HTML标准的方式来创建链接从而使得在浏览器中呈现的a标签能够正确地作为一个链接引导用户访问指定的控制器和动作。
2、_ViewStart.cshtml与视图引擎加载过程
这个文件更简单了其实它的作用就是调用layout文件。开始渲染代码如下
{Layout _Layout;
}
没有什么可讲解的。倒是视图引擎的加载过程有必要在这里说一说
程序页面开始时视图引擎控制首先加载viewstart文件从名字上就可以看出来老版本的dotnet core 项目有一个startup.cs的文件现在合并到program中去了这个viewstart文件还留着估计下次升级也会被合并掉。在_ViewStart.cshtml文件通常位于Views文件夹下中有对布局文件的引用如{Layout “~/Views/Shared/_layout.cshtml”;}。这告诉视图引擎在渲染任何视图时都要使用这个布局文件作为模板。 当Index.cshtml被请求时视图引擎首先加载_layout.cshtml然后将Index.cshtml的内容插入到_layout.cshtml中定义的RenderBody()位置。RenderBody()是一个占位符用于放置具体视图的内容。所以导航栏部分包含标签是布局文件本身的一部分会在每次渲染视图时一起显示在页面顶部为用户提供导航链接。
二、model的建立和使用
1、Error.cshtml
在上一篇博文中我们说过views\share文件夹下的Error.cshtmlh和_ValidationScriptsPartial.cshtml需要配合models来讲解。那么我们现在来看看为什么首先我们来看看Error.cshtml的代码
model ErrorViewModel
{ViewData[Title] Error;
}h1 classtext-dangerError./h1
h2 classtext-dangerAn error occurred while processing your request./h2if (Model.ShowRequestId)
{pstrongRequest ID:/strong codeModel.RequestId/code/p
}h3Development Mode/h3
pSwapping to strongDevelopment/strong environment will display more detailed information about the error that occurred.
/p
pstrongThe Development environment shouldnt be enabled for deployed applications./strongIt can result in displaying sensitive information from exceptions to end users.For local debugging, enable the strongDevelopment/strong environment by setting the strongASPNETCORE_ENVIRONMENT/strong environment variable to strongDevelopment/strongand restarting the app.
/p它的第一行就开始引入了模型在下面还是用到了模型的ShowRequestID属性
if (Model.ShowRequestId)
{pstrongRequest ID:/strong codeModel.RequestId/code/p
}2、ErrorViewModel.cs
这个文件是models文件夹下面唯一的文件我们来看看代码
namespace WebApplicationDemo.Models
{public class ErrorViewModel{public string? RequestId { get; set; }public bool ShowRequestId !string.IsNullOrEmpty(RequestId);}
}
其实这个model文件普通得再普通不过了就定义了一个属性和一个方法。很基础的C#知识这里就不逐句讲解了。 原文出处 https://haigear.blog.csdn.net/article/details/143316084
三、来一个自己的页面
1、建立模型文件
模型文件我们还是用前面博文《 一步一步从微信小程序获取asp.net Core API的数据中》使用过的Personalinfo的模型可以直接拷贝过来
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;namespace WebApplicationDemo.Models
{public class PersonalInfo{[Required][StringLength(50)][DefaultValue(张三)]public string? Name { get; set; }[Required][Range(0, 150)][DefaultValue(24)]public int? Age { get; set; }[Required][StringLength(10)][DefaultValue(男)]public string? Gender { get; set; }[Required][EmailAddress][DefaultValue(zhangsanexample.com)]public string? Email { get; set; }[Required][Phone][DefaultValue(13788888888)]public string? PhoneNumber { get; set; }[Required][DataType(DataType.Date)][DefaultValue(2000-01-01)]public DateTime BirthDate { get; set; }[Required][StringLength(100)][DefaultValue(张家口市张家镇张家村张家冲21号)]public string? Address { get; set; }[StringLength(50)][DefaultValue(码农)]public string? Occupation { get; set; }[Required][StringLength(30)][DefaultValue(China)]public string? Nationality { get; set; }}
}
2、建立视图页面
有了模型了我们就可以利用VS的向导来直接建立一个视图页面在Views文件夹上右键菜单选择添加“视图” 添加视图时选在模板Details省得自己写代码同时别忘记选择我们刚刚前面建立的模型类Personalinfo选择好后一键生成即可得到视图文件了 生成的页面代码自己如下
model WebApplicationDemo.Models.PersonalInfo{ViewData[Title] View;
}h1View/h1divh4PersonalInfo/h4hr /dl classrowdt class col-sm-2Html.DisplayNameFor(model model.Name)/dtdd class col-sm-10Html.DisplayFor(model model.Name)/dddt class col-sm-2Html.DisplayNameFor(model model.Age)/dtdd class col-sm-10Html.DisplayFor(model model.Age)/dddt class col-sm-2Html.DisplayNameFor(model model.Gender)/dtdd class col-sm-10Html.DisplayFor(model model.Gender)/dddt class col-sm-2Html.DisplayNameFor(model model.Email)/dtdd class col-sm-10Html.DisplayFor(model model.Email)/dddt class col-sm-2Html.DisplayNameFor(model model.PhoneNumber)/dtdd class col-sm-10Html.DisplayFor(model model.PhoneNumber)/dddt class col-sm-2Html.DisplayNameFor(model model.BirthDate)/dtdd class col-sm-10Html.DisplayFor(model model.BirthDate)/dddt class col-sm-2Html.DisplayNameFor(model model.Address)/dtdd class col-sm-10Html.DisplayFor(model model.Address)/dddt class col-sm-2Html.DisplayNameFor(model model.Occupation)/dtdd class col-sm-10Html.DisplayFor(model model.Occupation)/dddt class col-sm-2Html.DisplayNameFor(model model.Nationality)/dtdd class col-sm-10Html.DisplayFor(model model.Nationality)/dd/dl
/div
divHtml.ActionLink(Edit, Edit, new { /* id Model.PrimaryKey */ }) |a asp-actionIndexBack to List/a
/div
我们发现其实这个页面与前面我们介绍的index.cshtml页面没有什么差别差别在后面大量的使用了Html关键字而不是MOdel最后个div中包含了一个Html.ActionLink(“Edit”, “Edit”, new { /* id Model.PrimaryKey */ }) 我们来一起看看这些是什么意思
关于Html.DisplayFor
a、DisplayFor方法简介
Html.DisplayFor是ASP.NET MVC 和ASP.NET Core MVC 中常用的一个 HTML 辅助方法HTML Helper。它主要用于在视图中显示模型model的某个属性在这个例子中是Nationality属性的值。表达式语法model model.Nationality的作用 这里的model model.Nationality是一个 Lambda 表达式。它指定了要显示的模型属性。前面的model.Nationalitymodel.Occupationmodel.Name,model.Age都采用的这样方法来显示。 具体来说model代表视图中的模型对象这个对象是由控制器传递给视图的。是 Lambda 表达式的操作符model.Nationality表示要获取模型对象的Nationality属性。这个 Lambda 表达式告诉DisplayFor方法具体要显示模型中的哪个属性。 b、工作原理 当视图被渲染时DisplayFor方法会根据模型对象的类型和Nationality属性的类型来决定如何显示这个属性的值。 例如如果Nationality是一个简单的字符串类型如 “Chinese”它可能会直接将这个字符串显示在页面上。如果Nationality是一个复杂的对象DisplayFor可能会根据对象的ToString方法或者其他自定义的显示逻辑来呈现它的值。 另外DisplayFor方法还会考虑数据注解Data Annotations等因素。如果在模型类的Nationality属性上有[DisplayFormat]或其他相关的数据注解DisplayFor会按照注解的要求来显示属性值例如按照指定的日期格式显示日期属性或者按照指定的文本格式显示数值属性等。。
关于Html.ActionLink
a. Html.ActionLink的作用
和前面的Html.Dispplayfor一样Html.ActionLink也是一个HTML辅助方法HTML Helper它的主要作用是生成一个HTML超链接a标签。在这个例子中Html.ActionLink(Edit, Edit, new { /* id Model.PrimaryKey */ })会生成一个链接链接的文本是“Edit”。它会将用户引导到名为“Edit”的操作通常是控制器中的一个方法并且在理想情况下会将与当前模型相关的主键这里代码被注释掉了假设是Model.PrimaryKey作为参数传递过去。
b. 为什么是Html.ActionLink而不是Model.ActionLink
首先Model通常代表视图模型对象它的主要目的是在视图和控制器之间传递数据如业务逻辑相关的数据、状态信息等。它一般不包含用于生成HTML链接的方法。而Html.ActionLink是由ASP.NET提供的HTML辅助方法它属于System.Web.Mvc.Html命名空间在旧版本的MVC中或者相关的ASP.NET Core命名空间。这些HTML辅助方法是为了方便在视图中生成各种HTML元素利用了ASP.NET的路由系统和内部逻辑来构建正确的链接这是一种与视图渲染和路由相关的功能不是视图模型本身应该承担的职责。
如果我们此时调整好homecontroller中的路由访问的话具体如何调整可以参本章的4小节“看看效果”得到的是一个没有任何信息的浏览页 所以我们需要给它配上一个控制器来显示数据。
3、建立控制器
与建立视图文件一样在controllers文件件上右键菜单选择添加“控制器”选择
打开文件修改代码为
using Microsoft.AspNetCore.Mvc;
using WebApplicationDemo.Models;namespace WebApplicationDemo.Controllers
{public class PersonalInfoController : Controller{public IActionResult Index(){var personalInfo new PersonalInfo{Name 张三,Age 24,Gender 男,Email zhangsanexample.com,PhoneNumber 13788888888,BirthDate new DateTime(2000, 1, 1),Address 张家口市张家镇张家村张家冲21号,Occupation 码农,Nationality China};return View(personalInfo);}}
}如果我们此时运行程序观察效果一定还是与原来一样根本没任何改变那么问题出在哪里呢
有可能遇到的问题
按照ASP.NET Core MVC 的约定视图文件的名称通常应该与控制器方法的名称相同。并且视图文件应该位于Views文件夹下的与控制器名称对应的子文件夹中 1、如果控制器是PersonalInfoController视图文件应该在Views/PersonalInfo文件夹中,不能随便乱丢在其他文件件中。 2、控制器方法是Index视图文件应该是Index.cshtml。我们这个项目的PersonalinfoController中的方法是Index所以视图文件名称就是index.cshtml。不用怀疑我们每个文件夹中都可以拥有一个index.cshtml而不是以前我们写网站时一个网站只有一个index.asp/index.jsp/index.html。 保证上述问题后基本就可以得到正确的浏览结果了。 看效果之前我们也在导航中把我们的页面给挂上去这样才能和现在的项目融为一体。那么我们需要干两件事
a、在layout文件中增加一个链接
参照第一篇博文找到layout中的nav标签然后在其中增加下面的内容即可 li classnav-itema classnav-link text-dark asp-area asp-controllerPersonalInfo asp-actionindexPersonalInfo/a/li看看效果 好了到这里我们的《完全透彻了解一个asp.net core MVC项目模板》算是完整了感兴趣的同学可以继续关注我的博客。 原文出处 https://haigear.blog.csdn.net/article/details/143316084