生成特定于asp核心的html代码,包括asp属性

阿洛瓦

我是Razor的新手,但是经验丰富的经典html和C#。

首先,我完成了Microsoft剃刀教程完成之后,我想使用代码,所以我提出了问题。

我想通过反射创建html来使视图代码更加动态(我的意思是该视图代码)。将来我想通过模型生成整个html表单,而无需编写html。

有两个类似的属性块(标题和发布日期):

<div class="form-group">
    <label asp-for="Movie.Title" class="control-label"></label>
    <input asp-for="Movie.Title" class="form-control" />
    <span asp-validation-for="Movie.Title" class="text-danger"></span>
</div>
<div class="form-group">
    <label asp-for="Movie.ReleaseDate" class="control-label"></label>
    <input asp-for="Movie.ReleaseDate" class="form-control" />
    <span asp-validation-for="Movie.ReleaseDate" class="text-danger"></span>
</div>

在C#中,很容易通过反射来读取该属性并创建html。但是,当我创建html时,我无法使用特殊的“ asp-for ”和“ asp-validation-for ”属性。

为了测试服务器端渲染是否支持特殊的“ asp”属性,我在下面创建了硬编码(实验)代码:

@Html.Raw("<div class=\"form-group\">")
@Html.Raw("<label asp-for=\"Movie.Title\" class=\"control-label\"></label>")
@Html.Raw("<input asp-for=\"Movie.Title\" class=\"form-control\" />")
@Html.Raw("<span asp-validation-for=\"Movie.Title\" class=\"text-danger\"></span>")
@Html.Raw("</div>")

如我所料,“标题”的验证不再起作用。

我的问题是:

  • 如何通过反射的asp形式生成(或至少有一个Html.Raw垂饰用于此目的?)
  • “ asp”属性如何在后台工作(编译器是在执行魔术还是在运行时?)

谢谢你的努力!

安东俊

asp-*是TagHelpers,并在此处进行了详细记录它还向您展示如何创建自己的标签

我想给一个小技巧,介绍如何考虑Razor页面语法。它是一个模板引擎,因此需要一个.cshtml页面,扩展名告诉dotnet core它是一个剃须刀文件。并吐出一个html页面,然后最终将其发送到客户端的浏览器(如果您要在客户端上动态更新页面,Razor无法实现这一点,那么它只能在服务器端动态创建页面。)

那么dotnet核心如何处理asp-for标签?好吧,它<input asp-for="Model.Prop" />在html元素上生成html属性,将变成类似<input id="Prop" name="Prop" data-required="" data-maxlength="100" etc... />

因此,您可以创建一个自定义属性,将其绑定到 <form curstom-attr-bind-model="MyModel"></form>

然后,当请求页面时,将在服务器端构建html页面,并以通用形式实现。

编辑1

我无法告诉您如何通过自定义属性来执行此操作(但是,这引起了我的兴趣,我会弄清楚atm,我正在寻找他们如何在此处专门针对selectandinput元素实现其标签帮助程序),但是短期内您可能会做些什么像这样:

采取的步骤:

  1. 写这个:<input asp-for="Form.Number" />/<span asp-validation-for="Form.Number"></span>
  2. 在浏览器中查看生成了什么HTML。
  3. Html.Raw()method模仿它,将为您带来以下好处:@Html.Raw("<input id=\"Form_Number\" name=\"Form.Number\" />")

当您按自己的方式操作时,为什么它不起作用?因为它将逐行浏览cshtml文件并执行任何C#代码以模板化html。一旦执行,@Html.Raw()它就会呈现文本,如果您注意的话asp-for="Model.Number"Model.Number它不是文本而是对象,即使那样,它也不会递归地重新创建cshtml文件以继续寻找剃刀语法,直到完成为止。希望这不会造成混淆,只是认为将cshtml转换为html的过程从文件的顶部开始,然后逐步按照说明进行操作,直到到达末尾为止,这应该是有道理的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

包括特定于ASP.NET MVC4视图或部分视图的脚本

在区域中使用特定的状态代码错误页面| Asp.net核心

.gitignore仍然包括asp.net核心wwwroot / lib目录

如何在asp.net核心剃须刀页面中重用HTML代码段?

如何使用属性更改asp核心中的属性映射

在带有实体框架核心的ASP.NET Core WebAPI中使用“数据库生成的”处理属性

asp.net核心从生成中排除文件

在asp.net核心中生成动态路由路径

asp.net核心docker-compose刷新代码更改

如何使用ASP.Net核心ModelMetadata属性

asp.net核心身份声明与属性(效率观点)

从asp.net核心标识获取applicationuser的属性

ASP.NET核心属性路由-语言环境前缀

asp.net核心IFilterProvider筛选器属性未执行

特定于环境的构建与加载特定于环境的属性

我应该在ASP.NET MVC项目中的何处放置共享的HTML生成代码?

如何在特定于DataRow的代码隐藏中设置样式属性

将动态生成的html属性保存在数据库中(Asp.Net,Jquery)

在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?

ASP.NET Core中特定于区域的身份验证方案

扩展UserManager以包括按自定义字段ASP.net核心进行的搜索

Asp.Net核心中的@ Html.Action

使用JavaScript将换行符插入HTML textContent属性(特定于IE)

混合html和代码asp.net

实体框架核心更新-特定于数据库的迁移

Spring Boot,特定于环境的属性位置

Glom:如何包括特定于字段的默认值

在HTML属性中使用asp:Literal文字

ASP NET Core服务特定的html页面

TOP 榜单

热门标签

归档