Blazor University (9)组件 — 代码生成 HTML 属性

原文链接:https://blazor-university.com/components/code-generated-html-attributes/

代码生成 HTML 属性

Razor 在条件 HTML 输出或在 for 循环中输出 HTML 时非常棒,但在元素本身内的条件代码方面,事情就有点棘手了。例如,以下代码无法编译,因为您无法在元素的 <> 内添加 C# 控制块。

<img@foreach(var nameAndValue in AdditionalAttributes){@nameAndValue.Key = @nameAndValue.Value} src="https://randomuser.me/api/portraits/lego/1.jpg" />@code
{Dictionary<string, object> AdditionalAttributes;protected override void OnInitialized(){AdditionalAttributes = new Dictionary<string, object>{["id"] = "EmmetImage",["alt"] = "A photo of Emmet"};base.OnInitialized();}
}

我们可能尝试的下一个方法是编写一个返回字符串的方法,并在 <> 字符内调用它。

<div @IfYouCanSeeThisTextThenTheCodeWasNotExecutedHere />
<span>@IfYouCanSeeThisTextThenTheCodeWasNotExecutedHere</span>@code
{string IfYouCanSeeThisTextThenTheCodeWasNotExecutedHere = "The code here was executed";
}

但这也不起作用。前面的示例将输出以下 HTML。

<div @ifyoucanseethistextthenthecodewasnotexecutedhere=""></div>
<span>The code here was executed</span>`

Razor 只会在以下位置执行 C# 代码:

  1. 在元素的内容区域内,例如 <span>@GetSomeHtml()</span>

  2. 在确定要分配给元素属性的值时,例如 <img src=@GetTheImageForTheUrl() />

  3. @code 部分中。

我们需要用来为 HTML 元素生成一个或多个属性 + 值的技术称为“属性展开”。属性展开涉及将 Dictionary<string, object> 分配给具有特殊名称 @attribute 的属性。

<div @attributes=MyCodeGeneratedAttributes/>@code
{Dictionary<string, object> MyCodeGeneratedAttributes;protected override void OnInitialized(){MyCodeGeneratedAttributes = new Dictionary<string, object>();for(int index = 1; index <= 5; index++){MyCodeGeneratedAttributes["attribute_" + index] = index;}}
}

前面的代码将输出一个具有 5 个属性的 <div>

<div attribute_1="1" attribute_2="2" attribute_3="3" attribute_4="4" attribute_5="5"></div>

特殊情况

一些 HTML 属性,例如 readonlydisabled 不需要任何值——它们仅存在于元素上就足以使它们生效。事实上,即使应用诸如 false 之类的值仍然会激活它们。以下 <input> 元素将是只读和禁用的。

<input readonly="false" disbabled="false"/>

在 razor 视图中,规则略有不同。如果我们输出 readonly=@IsReadOnlydisabled=@IsDisabled - 只要分配的值为 false,razor 根本不会输出该属性;当分配的值为 true 时,razor 将在不分配值的情况下输出元素。

<input readonly=@true disabled=@false/> 将导致生成的 HTML 完全不包含 disabled 属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python重定向_在Python中使用urlopen()防止“隐藏”重定向

我正在使用BeautifulSoup进行网页抓取,并且在使用urlopen时遇到特定类型网站的问题.网站上的每个商品都有其独特的页面,并且商品具有不同的格式(例如&#xff1a;500 mL,1L,2L等). 当我使用Internet浏览器打开产品的URL(www.example.com/product1)时,会看到500 mL格式的图片,有…

CentOS安装JAVA JDK

普通情况下&#xff0c;我们都要将linux自带的OPENJDK卸载掉。然后安装SUN的JDK。首先查看Linux自带的JDK是否已安装。 输入例如以下命令&#xff0c;查看已经安装的JAVA版本号信息。 Linux代码 java -version 输入例如以下命令。查看JDK的信息。Linux代码 rpm -qa|grep j…

Android之解决Android8.0手机(Notification)收不到自定义消息通知以及其它手机得到数据不同步

1 问题 app,自定义消息通知的时候,在Android8.0手机上收不到通知 2 解决办法 NotificationManager需要创建NotificationChannel,然后调用createNotificationChannel把NotificationChannel传递进去,并且通过setChannelId设置相应的id 3 普通样本代码实现 private static fina…

世界史

评价华盛顿&#xff1a;打破一个旧世界需要勇气与胆魄&#xff0c;建设一个新世界却需要耐心与智慧。

安装bigdesk后es无法启动_安装天正后,探索者无法双击启动?

用户经常会出现&#xff0c;安装天正后&#xff0c;探索者无法双击启动&#xff0c;或者是图纸无法拖拽入CAD中&#xff0c;如何解决&#xff1f;答&#xff1a;天正安装完成后&#xff0c;默认将CAD的acad.exe程序&#xff0c;添加了“以管理员身份运行此程序”而导致的&#…

服务器安全维护包含,服务器安全维护包含

服务器安全维护包含 内容精选换一换本章节介绍如何使用管理控制台向导创建裸金属服务器。创建裸金属服务器时&#xff0c;您需要配置规格、镜像、存储、网络、安全组等必备信息。同时&#xff0c;向导也提供了丰富的扩展配置功能&#xff0c;方便您进行个性化部署和管理。在创建…

VS2008系统开发背景图片的添加及注意事项

最初的做法是&#xff0c;直接将父窗体的Image属性改成背景图片&#xff0c;并将其BackgroundImageLayout属性设置为stretch&#xff0c;结果发现这样做的结果是系统运行超级慢&#xff0c;便考虑用代码实现&#xff0c;如下&#xff1a; //this.BackgroundImage System.Draw…

JavaScript中的的面向对象中的一些知识

JavaScript中的的面向对象中的一些知识 function Cat(name,age){return {name:name,age:age }}//构造函数function Dog(name,age){this.namename;this.ageage; }function show(){var c1new Cat("cat1",18);var c2new Cat("cat2",19);//Javascript还提…

C# 发出异步的Get请求

下列的下载代码示例是 HttpClientSample。它以不同的方式异步调用Web 服务。为了演示本例使用的不同方法&#xff0c;使用了命令行参数。示例代码使用了以下名称空间&#xff1a;System System.Linq System.Net System.Net.Http System.Net.Http.Headers System.Threading Sy…

python用pandas读取excel_Python使用pandas读取Excel文件数据和预处理小案例

假设有Excel文件data.xlsx&#xff0c;其中内容为 现在需要将这个Excel文件中的数据读入pandas&#xff0c;并且在后续的处理中不关心ID列&#xff0c;还需要把sex列的female替换为1&#xff0c;把sex列的male替换为0。本文演示有关的几个操作。 &#xff08;1&#xff09;导入…

shader 3 rendering path

渲染通道&#xff0c; rendering path。 vertexlit&#xff0c; forward 和 Deferred lighting 旧有的非统一架构下&#xff1a; 分为顶点着色引擎和像素渲染通道 渲染通道是GPU负责给图像配色的专门通道&#xff1b; 越多&#xff0c;填充效率越高&#xff0c;流畅性越好。 ht…

《帝王三部曲》——二月河

前一段时间断断续续的在看二月河写的《帝王三部曲》中的《雍正王朝》。写的真棒&#xff01;然后又迫不及待地去读远上搜索下载了三部曲全本&#xff0c;可惜&#xff0c;下载到现在一直未去看…… 生活总是这样&#xff0c;忙忙碌碌的……欲望太多。 希望自己以后做事情&#…

React Native之Props(属性)和State(状态)和简单样式简单使用

1 Props(属性)和State(状态)和简单样式简单使用App.js代码如下 /*** Sample React Native App* https://github.com/facebook/react-native** format* flow*/import React, {Component} from react; import {Platform, StyleSheet, Text, View, NativeModules, DeviceEvent…

解决SQL Server 2005数据库中datetime时间字段在前端显示时分秒的问题

SQL Server 2005中时间类型datetime的格式是“年月日时分秒”,直接读出来该字段,为了不让它在前端显示“时分秒”若是显示在dataGridView中,可以修改控件的某一列格式,如: dataGridView1.Columns[10].DefaultCellStyle.Format = "yyyy-MM-dd"; 但是要在listview…

config kubectl_Kubernetes(k8s)中文文档 kubectl config set-context_Kubernetes中文社区

译者&#xff1a;hurf在kubeconfig配置文件中设置一个环境项。摘要在kubeconfig配置文件中设置一个环境项。 如果指定了一个已存在的名字&#xff0c;将合并新字段并覆盖旧字段。kubectl config set-context NAME [--clustercluster_nickname] [--useruser_nickname] [--namesp…

Linux文件系统基础(1)

本文首发于http://oliveryang.net&#xff0c;转载时请包含原文或者作者网站链接。 1. 什么是文件系统 直接引用来自维基百科文件系统的定义&#xff0c; A file system is a set of abstract data types that are implemented for the storage, hierarchical organization, ma…

使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题

理想的代码优化方式团队日常协作中&#xff0c;自然而然的会出现很多重复代码&#xff0c;根据这些代码的种类&#xff0c;之前可能会以以下方式处理方式描述应用时可能产生的问题硬编码多数新手&#xff0c;或逐渐腐坏的项目会这么干&#xff0c;会直接复制之前实现的代码带来…

React Native之Flexbox布局和监测文本输入onChangeText

1 Flexbox布局 1) flexDirection 可以决定布局的主轴,子元素是应该沿着水平轴(row)方向排列&#xff0c;还是沿着竖直轴(column)方向排列 2) justifyContent 决定其子元素沿着次轴&#xff08;与主轴垂直的轴&#xff0c;比如若主轴方向为row&#xff0c;则次轴方向为…

半年总结——欲戴王冠,必承其重

【Introduction】 每一个女生都梦想着作为一个女王。但是你仅仅看到了女王头上金闪闪的王冠&#xff0c;却不知道在这个王冠下。她是怎样成长的&#xff01;假设你想要做到有女王一样的权利&#xff0c;就必需要承担一个女王应该做到的事情&#xff01;——欲带王冠&#xff0c…

SQL日期时间格式自由转换大全

日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/