C# 枚举ViewData.Model的所有属性
我正在尝试使用C# 枚举ViewData.Model的所有属性,c#,asp.net-mvc,viewdata,C#,Asp.net Mvc,Viewdata,我正在尝试使用PartialView创建一个通用网格。我将推送任何模型,它将输出一些html和js,以便我可以重用。但为此,我需要dynamic类型的IEnumerable,现在我需要从ViewData.model中获取传递模型的所有属性,因为这是我设置模型的地方。但我找不到具体的解决办法。 有人能给我指一下正确的方向吗?这将是一个很大的帮助。我认为没有必要使用PartialView我将为此创建一个HTML帮助程序。然后,html助手只接受一个简单的对象作为模型。在助手中,您可以构造表(使用字
PartialView
创建一个通用网格。我将推送任何模型,它将输出一些html和js,以便我可以重用。但为此,我需要dynamic
类型的IEnumerable
,现在我需要从ViewData.model
中获取传递模型的所有属性,因为这是我设置模型的地方。但我找不到具体的解决办法。
有人能给我指一下正确的方向吗?这将是一个很大的帮助。我认为没有必要使用
PartialView
我将为此创建一个HTML帮助程序。然后,html助手只接受一个简单的对象
作为模型。在助手中,您可以构造表(使用字符串),然后枚举对象模型的所有属性
这可以很容易地通过创建一个html助手来实现
public static class HtmlHelpers
{
public static IHtmlString ModelTableForm(this HtmlHelper html, object model)
{
StringBuilder modelTable = new StringBuilder();
modelTable.Append("<table>");
modelTable.AppendFormat("<caption>{0}</caption>", model.GetType().Name);
modelTable.Append("<tbody>");
foreach (var property in model.GetType().GetProperties())
modelTable.Append(addModelRow(property.Name, property.GetValue(model, null)));
modelTable.Append("</tbody>");
modelTable.Append("</table>");
return html.Raw(modelTable.ToString());
}
static string addModelRow(string name, object value)
{
StringBuilder row = new StringBuilder();
row.Append("<tr>");
row.AppendFormat("<td>{0}</td>", name);
row.AppendFormat("<td>{0}</td>", value);
row.Append("</tr>");
return row.ToString();
}
}
这将生成一个表(尽管它需要更多的样式工作)。作为
我的建议是添加一些样式,或者属性类型检查修改助手显示不同属性类型的方式。(即如果属性继承IEnumerable,则使用递归将所有条目和属性枚举到子表中)
无论如何。希望这有帮助我认为没有必要使用
部分视图
我会为此创建一个HTML帮助程序。然后,html助手只接受一个简单的对象
作为模型。在助手中,您可以构造表(使用字符串),然后枚举对象模型的所有属性
这可以很容易地通过创建一个html助手来实现
public static class HtmlHelpers
{
public static IHtmlString ModelTableForm(this HtmlHelper html, object model)
{
StringBuilder modelTable = new StringBuilder();
modelTable.Append("<table>");
modelTable.AppendFormat("<caption>{0}</caption>", model.GetType().Name);
modelTable.Append("<tbody>");
foreach (var property in model.GetType().GetProperties())
modelTable.Append(addModelRow(property.Name, property.GetValue(model, null)));
modelTable.Append("</tbody>");
modelTable.Append("</table>");
return html.Raw(modelTable.ToString());
}
static string addModelRow(string name, object value)
{
StringBuilder row = new StringBuilder();
row.Append("<tr>");
row.AppendFormat("<td>{0}</td>", name);
row.AppendFormat("<td>{0}</td>", value);
row.Append("</tr>");
return row.ToString();
}
}
这将生成一个表(尽管它需要更多的样式工作)。作为
我的建议是添加一些样式,或者属性类型检查修改助手显示不同属性类型的方式。(即如果属性继承IEnumerable,则使用递归将所有条目和属性枚举到子表中)
无论如何。希望这有帮助谢谢。我没想到。这也会起作用。但我的问题仍然是,如果我必须做我在问题中提到的事情。我仍然会被卡住。我个人会在助手上做这件事,而不是部分,因为你的代码会更干净。使用分部,您仍然需要为属性编写枚举逻辑,如果您想扩展属性值的显示方式,您可能会发现分部变得非常复杂。谢谢。我想现在和助手一起去吧。非常感谢您的帮助:)但为了便于讨论,如果我使用的是Helpers,那么我就错过了在
PartialView
中获得的格式和语法突出显示。将字符串作为代码输出是一个噩梦。谢谢。我没想到。这也会起作用。但我的问题仍然是,如果我必须做我在问题中提到的事情。我仍然会被卡住。我个人会在助手上做这件事,而不是部分,因为你的代码会更干净。使用分部,您仍然需要为属性编写枚举逻辑,如果您想扩展属性值的显示方式,您可能会发现分部变得非常复杂。谢谢。我想现在和助手一起去吧。非常感谢您的帮助:)但为了便于讨论,如果我使用的是Helpers,那么我就错过了在PartialView
中获得的格式和语法突出显示。将字符串作为代码输出是一场噩梦。