首页 > 编程语言 >ASP.NET Core 中的显示和编辑器模板

ASP.NET Core 中的显示和编辑器模板

时间:2023-08-08 15:13:57浏览次数:34  
标签:Core ASP DisplayFor Html DisplayNameFor Address NET model 模板

显示模板和编辑器模板指定了自定义类型的用户界面布局。 考虑下列 Address 模型:

C#
public class Address
{
    public int Id { get; set; }
    public string FirstName { get; set; } = null!;
    public string MiddleName { get; set; } = null!;
    public string LastName { get; set; } = null!;
    public string Street { get; set; } = null!;
    public string City { get; set; } = null!;
    public string State { get; set; } = null!;
    public string Zipcode { get; set; } = null!;
}

设置 Address 模型基架的项目按以下形式显示 Address

模型的默认基架布局视图

网站可使用显示模板以标准格式显示 Address

使用地址模板的默认基架布局的视图

显示模板和编辑器模板还可以减少代码重复和维护成本。 请考虑一个在 20 个不同页面上显示 Address 模型的网站。 如果模型 Address 发生更改,则需要更新全部 20 个页面。 如果对 Address 模型使用显示模板,则只需更新显示模板。 例如,Address 模型可能会更新显示国家或地区。

标记帮助程序提供了另一种方法,使服务器端代码可在 Razor 文件中参与 HTML 元素的创建和呈现。 有关详细信息,请参阅标记帮助程序与 HTML 帮助程序的比较

显示模板

DisplayTemplates 可自定义模型字段的显示,或者在模型值与其显示之间创建一个抽象层。

DisplayTemplate 是 DisplayTemplates 文件夹中的 Razor 文件:

  • 对于 Razor Pages 应用,则在 Pages/Shared/DisplayTemplates 文件夹中。
  • 对于 MVC 应用,则在 Views/Shared/DisplayTemplates 文件夹或 Views/ControllerName/DisplayTemplates 文件夹中。 Views/Shared/DisplayTemplates 中的显示模板供应用中的所有控制器使用。 Views/ControllerName/DisplayTemplates 文件夹中的显示模板仅由 ControllerName 控制器解析。

按照约定,DisplayTemplate 文件以要显示的类型命名。 此示例中使用的 Address.cshtml 模板:

CSHTML
@model Address

<dl>
    <dd>@Model.FirstName @Model.MiddleName @Model.LastName</dd>
    <dd>@Model.Street</dd>
    <dd>@Model.City @Model.State @Model.Zipcode</dd>
</dl>

视图引擎会自动在 DisplayTemplates 文件夹中查找与类型名称匹配的文件。 如果找不到匹配的模板,它将回退到内置模板。

以下代码显示了已搭建基架的项目的“详细信息”视图:

CSHTML
@page
@model WebAddress.Pages.Adr.DetailsModel

@{
    ViewData["Title"] = "Details";
}

<h1>Details</h1>

<div>
    <h4>Address</h4>
    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.FirstName)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.FirstName)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.MiddleName)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.MiddleName)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.LastName)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.LastName)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.Street)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.Street)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.City)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.City)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.State)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.State)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Address.Zipcode)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Address.Zipcode)
        </dd>
    </dl>
</div>
<div>
    <a asp-page="./Edit" asp-route-id="@Model.Address?.Id">Edit</a> |
    <a asp-page="./Index">Back to List</a>
</div>

以下代码显示了使用地址显示模板的“详细信息”视图:

CSHTML
@page
@model WebAddress.Pages.Adr2.DetailsModel

@{
    ViewData["Title"] = "Details";
}

<h1>Details</h1>

<div>
    <h4>Address DM</h4>
    <hr />
    <dl class="row">
        <dd class="col-sm-10">
           @Html.DisplayFor(model => model.Address)
        </dd>
    </dl>
</div>
<div>
    <a asp-page="./Edit" asp-route-id="@Model.Address?.Id">Edit</a> |
    <a asp-page="./Index">Back to List</a>
</div>

若要引用名称与类型名称不匹配的模板,请在 DisplayFor 方法中使用 templateName 参数。 例如,以下标记使用 AddressShort 模板显示 Address 模型:

CSHTML
@page
@model WebAddress.Pages.Adr2.DetailsCCModel

@{
    ViewData["Title"] = "Details Short";
}

<h1>Details Short</h1>

<div>
    <h4>Address Short</h4>
    <hr />
    <dl class="row">
        <dd class="col-sm-10">
           @Html.DisplayFor(model => model.Address,"AddressShort")
        </dd>
    </dl>
</div>

使用所提供的公开 additionalViewData 参数的 DisplayFor 重载之一来传递额外视图数据,这些数据合并到为模板创建的视图数据字典实例中。

编辑器模板

编辑或更新模型时,会在窗体控件中使用编辑器模板。

EditorTemplate 是 EditorTemplates 文件夹中的 Razor 文件:

  • 对于 Razor Pages 应用,则在 Pages/Shared/EditorTemplates 文件夹中。
  • 对于 MVC 应用,则在 Views/Shared/EditorTemplates 文件夹或 Views/ControllerName/EditorTemplates 文件夹中。

以下标记显示了示例中使用的 Pages/Shared/EditorTemplates/Address.cshtml

CSHTML
@model Address

<dl>
    <dd>    Name:
        <input asp-for="FirstName" /> <input asp-for="MiddleName" /> <input asp-for="LastName" /> 
    </dd>
        <dd>    Street:
        <input asp-for="Street" /> 
    </dd>

        <dd>    city/state/zip:
        <input asp-for="City" /> <input asp-for="State" /> <input asp-for="Zipcode" /> 
    </dd>

</dl>

以下标记显示了使用 Pages/Shared/EditorTemplates/Address.cshtml 模板的 Edit.cshtml 页面:

CSHTML
@page
@model WebAddress.Pages.Adr.EditModel

@{
    ViewData["Title"] = "Edit";
}

<h1>Edit</h1>

<h4>Address</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <input type="hidden" asp-for="Address.Id" />
             @Html.EditorFor(model => model.Address)
            <div class="form-group">
                <input type="submit" value="Save" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-page="./Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

标签:Core,ASP,DisplayFor,Html,DisplayNameFor,Address,NET,model,模板
From: https://www.cnblogs.com/Alex80/p/17614365.html

相关文章

  • C#/.NET/.NET Core优秀项目和框架每周精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)
    思维导航前言项目地址项目分类(善用Ctrl+F)项目列表加入DotNetGuide技术交流群前言注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯......
  • 第五节:EF Core中的三类事务(SaveChanges、DbContextTransaction、TransactionScope)
    第五节:EFCore中的三类事务(SaveChanges、DbContextTransaction、TransactionScope)原文链接:https://blog.csdn.net/weixin_30954265/article/details/101542615?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-10154......
  • .NET5从零基础到精通:全面掌握.NET5开发技能
    C#版本新语法-官网:C#7:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7C#8:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-8C#9:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9一、C#6新语法1.1-自动属性初始......
  • EF Core事务
    EFCore事务原文链接:https://blog.csdn.net/m0_47659279/article/details/119929767EFCore事务EFCore提供了SaveChange方法,可以把数据操作好之后再统一调用SaveChange方法,这样就实现了简单的事务功能如果需要多个SaveChange形成一个事务,就是说多个SaveChange要么全部成......
  • DEVICENET转ETHERCAT网关连接汇川ethercat通讯协议
    你有没有遇到过生产管理系统中,设备之间的通讯问题?两个不同协议的设备进行通讯,是不是很麻烦?今天,我们为大家介绍一款神奇的产品,能够将不同协议的设备进行连接,让现场的数据交换不再困扰!捷米JM-ECT-DNT是一款DEVICENET从站功能的通讯网关,可以将DEVICENET转ETHERCAT网络连接起来。它......
  • Rinetd——端口转发工具
    前言iptables的功能当然强大,但理解与设置却有点抽象,便通过google认识了rinetd。简介Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd......
  • JAVA jar包转.NET dll文件注意事项
    一、配置等:javaVersion:”1.8.0_151”IKVM:ikvm-8.1.5717.0IKVM下载地址:链接:https://pan.baidu.com/s/1mYutk0yghHxw2rOgFpDKJw提取码:0777IKVM需要配置环境:将IKVM.NET的bin文件夹的地址添加到环境变量。计算机右键属性–高级系统设置–高级–环境变量–在系统变量中找到PATH......
  • 银河麒麟等 Linux系统 安装 .net 5,net 6及更高版本的方法
    最近项目上用到银河麒麟的操作系统,需要搭建.net跨平台方案。一开始使用各种命令都安装不上,很多提示命令找不到,或者下载包时候网络无法下载。网上教程很多,但没有一个是成功的,多数使用apt-get等命令,都报错,提示命令未找到。于是开始手动安装。最终发现还是在Windows官网给出......
  • HS-GCN Hamming Spatial Graph Convolutional Networks for Recommendation
    目录概符号说明HS-GCNInitialLayerPropagationLayerHashCodeEncoding矩阵表示PredictionLayerOptimization代码LiuH.,WeiY.,YinJ.andNieL.HS-GCN:Hammingspatialgraphconvolutionalnetworksforrecommendation.IEEETKDE.概二值化的nodeembedding.符......
  • ASP.NET+EASYUI 换肤代码
    ​​编辑​......