如何解决直接实例化ModelExpression
@model Productviewmodel
<label asp-for="Product.Id"></label>
就我而言,它扩展为以下内容:
<label for="Product_Id">Id</label>
我看到asp-for
期望有ModelExpression
:
public ModelExpression For { get; set; }
有没有一种方法可以直接在C#中实例化ModelExpression
?
即像这样的东西:
var exp = new ModelExpression("Product.Id",...)
我希望能够像Product.Id
标签助手那样从input
生成“ Product_Id”和“ Id”。
解决方法
据我所知,您可以通过使用ModelExpression类型声明属性来指定将属性设置为View的Model对象上某些属性的名称。这将使使用您的属性的所有开发人员都能获得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的更多详细信息,请检查以下链接:
Creating Custom Tag Helpers With ASP.NET Core MVC
我希望能够从Product.Id生成“ Product_Id”和“ Id” 就像输入标签助手一样。
此外,我是否认为您要将Product. Id
更改为Product_Id
,我不建议您更改它,因为通常我们可以使用“ _”作为分隔符属性名称。因此,如果我们使用Product.Id
,则表示产品的Id属性,而Product_Id
则意味着具有Product_Id
属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。