如何解决尝试使用 C# 导航 ModelMetadata 时,如何获取 ContainerMetadata 的 PropertyName?
我有一个在 ASP.NET Core 5 框架之上使用 C#
编写的项目。
我正在尝试使用 Razor 引擎手动呈现 ModelMetadata
内容。 ModelMetadata
为我提供了一个名为 ContainerMetadata
的属性,在父 ModelMetadata 上找到复杂类型属性的情况下,它告诉我有关父 ModelMetadata
的信息。
但是,PropertyName
上的 ContinerMetadata
属性始终为 null。
我有以下视图模型。使用 Mainviewmodel
方法将 View()
波纹管从控制器传递到视图。
public class Mainviewmodel
{
public int ID { get; set; }
public class Cellviewmodel { get; set; }
}
public class Cellviewmodel
{
public string Name { get; set; }
}
现在在剃刀视图中,我使用 ModelMetadata
Html.ViewData.ModelMetadata
我的目标是能够使用扩展方法手动呈现 HTML。为了获取我想要呈现的每个属性的 ModelMetadata
,我使用以下函数
public static IHtmlContent GetHtml(this IHtmlHelper html,ModelMetadata Metadata)
{
HtmlContentBuilder code = new HtmlContentBuilder();
IEnumerable<ModelMetadata> elements = Metadata.Properties.Where(Metadata => Metadata.ShowFordisplay);
foreach(ModelMetadata element in elements)
{
if(element.IsClass)
{
// When this code is called,each proeprty on the element.ModelType has ContainerModelMetadata which is element
// However,when I access ContainerModelMetadata.PropertyName I get null.
var subCode = html.GetHtml(element);
code.AppendHtml(subCode);
continue;
}
code.AppendHtml(html.Editor(element.propertyName));
}
return code;
}
所以解决这个问题,我每次都可以像这样传递父
public static IHtmlContent GetHtml(this IHtmlHelper html,ModelMetadata Metadata,string parentName = null)
{
HtmlContentBuilder code = new HtmlContentBuilder();
IEnumerable<ModelMetadata> elements = Metadata.Properties.Where(Metadata => Metadata.ShowFordisplay);
foreach(ModelMetadata element in elements)
{
if(element.IsClass)
{
// When this code is called,when I access ContainerModelMetadata.PropertyName I get null.
var subCode = html.GetHtml(element,element.Name);
code.AppendHtml(subCode);
continue;
}
string expression = element.propertyName;
if(!string.IsNullOrEmpty(parentName))
{
expression = $"{parentName}.{element.PropertyName}";
}
code.AppendHtml(html.Editor(expression));
}
return code;
}
如上所示,我必须将 parentName
传递到每个级别,以便获得正确的表达式。这里的问题是在我的代码中,我有更深的层次,这需要我将 parentName 传递给每个函数。我希望避免除了 parentName 之外还必须同时传递属性的 ModelMetadata。我希望能够从给定的 ModelMetadata
中获取 parentName,因为我已经有了 ContainerModelMetadata
。
当 PropertyName
不为 null 时,如何从 ContinerMetadata
正确访问 ContinerMetadata
的值?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。