asp.net-core - 直接实例化 ModelExpression
问题描述
假设我有以下input
使用内置标签助手的标签:
@model ProductViewModel
<label asp-for="Product.Id"></label>
就我而言,这扩展为以下内容:
<label for="Product_Id">Id</label>
我看到这asp-for
是期待一个ModelExpression
:
在标签助手实现中,我经常看到如下属性:
public ModelExpression For { get; set; }
使用标签助手时,这似乎是自动填充的。
有没有办法ModelExpression
直接在 C# 中实例化 a ?
即是这样的:
var exp = new ModelExpression("Product.Id",...)
我希望能够Product.Id
像input
标签助手那样生成“Product_Id”和“Id”。
解决方案
据我所知,您可以通过使用 ModelExpression 类型声明您的属性来指定您的属性将设置为视图模型对象上某个属性的名称。这将使任何使用您的属性的开发人员能够获得 IntelliSense 支持,以从 Model 对象输入属性名称。更重要的是,您的代码将通过 ModelExpression 的 Model 属性传递该属性的值。
示例代码如下:
[HtmlTargetElement("employee-details")]
public class EmployeeDetailTagHelper : TagHelper
{
[HtmlAttributeName("for-name")]
public ModelExpression EmployeeName { get; set; }
[HtmlAttributeName("for-designation")]
public ModelExpression Designation { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "EmployeeDetails";
output.TagMode = TagMode.StartTagAndEndTag;
var sb = new StringBuilder();
sb.AppendFormat("<span>Name: {0}</span> <br/>", this.EmployeeName.Model);
sb.AppendFormat("<span>Designation: {0}</span>", this.Designation.Model);
output.PreContent.SetHtmlContent(sb.ToString());
}
}
查看页面中的代码:
@model WebApplication7.Models.EmployeeViewModel
<div class="row">
<employee-details for-name="Name" for-designation="Designation"></employee-details>
</div>
模型中的代码
public class EmployeeViewModel
{
public string Name { get; set; }
public string Designation { get; set; }
}
从上面的代码中,您可以看到我们可以自定义属性名称。有关使用 ModelExpression 的更多详细信息,请查看以下链接:
我希望能够像输入标签助手那样从 Product.Id 生成“Product_Id”和“Id”。
此外,您的意思是要更改Product. Id
to Product_Id
,在我看来,我不建议您更改它,因为通常我们可以在属性名称中使用“_”作为分隔符。因此,如果我们使用Product.Id
,则表示产品的 Id 属性,并且Product_Id
表示那里有一个Product_Id
属性。
推荐阅读
- python - 可视化 CNN 过滤器时,元组索引超出范围
- vue.js - 如何从 getPlaceDetails 获取照片位置?在 VUE 中
- python - 无法在 QTreeWidget 中添加 QTextEdit
- clojure - 你在 lisp 中看到的最优雅的一段代码是什么
- javascript - 使用具有内容类型的 POST Fetch 调用时,从服务器返回本机 422 Unprocessable Entity 错误:application/x-www-form-urlencoded
- r - R:sparklyr 中的组(“sum”、“count distinct”、“mean”)
- javascript - JS中的评论是如何分类的?
- python - 在 Python 中使用 XLwings 从下拉列表中选择
- excel - 索引和匹配从上面的行返回答案
- docker - conda cache for docker