我正在尝试使用PartialView
创建通用网格。在哪里我将推送任何模型,它将输出一些html和js,以便我可以重用。但为此,我需要dynamic
类型IEnumerable
,现在我需要从ViewData.Model
获取传递模型的所有属性,因为这是我设置模型的地方。但我找不到具体的解决方案。
有人可以指出我正确的方向吗?那将是一个很大的帮助。
答案 0 :(得分:4)
我没有看到需要PartialView
我会为此创建一个HTML帮助器。你的html助手只接受一个简单的object
作为模型。在帮助器中,您构造表(使用字符串),然后枚举对象模型的所有属性。
这可以通过创建一个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();
}
}
正如您所看到的,这个帮助器只是使用字符串构造表,并枚举所有属性,为每个属性创建一行。
接下来是访问HTML帮助器。现在这一切都取决于您创建类的位置,但可以使用语句
轻松添加到任何View using <my full html helper namespace
;
最后要调用Helper,你只需要简单地从@Html
对象调用html帮助器。
@Html.ModelTableForm(Model)
这将生成一个表(所有人都需要更多的样式工作)。如
我的建议是添加一些样式,也许是属性类型检查,修改帮助程序如何显示不同的属性类型。 (如果属性继承IEnumerable以通过使用递归将所有条目和属性枚举到子表中,则为IE)。
反正。希望这有帮助