我想用PartialView
创建一个通用网格。在哪里我将推出任何模型,它会输出一些html和js,以便我可以重用。但为此,我需要dynamic
IEnumerable
类型,现在我需要从ViewData.Model
获得传递模型的所有属性,因为那是我设置模型的地方。但我找不到具体的解决方案。
有人可以请我指出正确的方向吗?这将是一个很大的帮助。枚举ViewData.Model的所有属性
0
A
回答
4
我没有看到需要PartialView
我会为此创建一个HTML助手。你的html helper只接受一个简单的object
作为模型。在帮助程序中,您可以使用字符串构造表格,然后枚举对象模型的所有属性。
这可以很容易地通过创建一个html helper来完成。
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助手。现在这一切都取决于您创建课程的位置,但可以使用以下语句轻松添加到任何视图:
using <my full html helper namespace
;
最后要调用帮助器,你只需要简单地调用@Html
对象的html帮助器即可。
@Html.ModelTableForm(Model)
这将生成一个表(全部 - 它需要更多的样式工作)。作为
我的建议是添加一些风格,也许物业类型检查修改助手是如何显示不同的物业类型。 (如果该属性继承IEnumerable以通过递归枚举所有条目和属性到子表中,则为IE)。
无论如何。希望这可以帮助
相关问题
- 1. 枚举Mozilla中的所有属性JSAPI
- 2. Visualstudio宏 - 枚举所有项目属性
- 3. 具有属性和性能的枚举
- 4. Html属性枚举
- 5. 选择枚举值枚举属性
- 6. 如何枚举具有自定义类属性的所有类?
- 7. Powershell的枚举属性
- 8. C#具有标志的枚举属性
- 9. 具有属性的UML建模枚举
- 10. Visual Studio属性没有显示所有枚举选项
- 11. 任何方式来遍历所有的非枚举属性?
- 12. 如何枚举所有对象并获取它们的属性?
- 13. 枚举具有标志属性
- 14. TestComplete对象 - 枚举属性
- 15. 从属性创建枚举
- 16. Javascript非可枚举属性
- 17. 迭代非枚举属性
- 18. Swift枚举和CBCharacteristic属性
- 19. C++枚举属性如C#
- 20. C#类属性枚举
- 21. Automapper枚举说明属性
- 22. JScript中枚举和属性
- 23. 得到Description属性枚举
- 24. 枚举标志属性C#
- 25. 使用DocumentTraversal枚举属性
- 26. 标志枚举属性
- 27. 引用属性枚举值
- 28. EF6忽略(NotMapped)所有枚举类型属性
- 29. 类型安全的枚举或属性枚举?
- 30. 有没有办法枚举所有的属性,并逐一释放它们?
谢谢。没有想到这一点。这也可以。但是我的问题仍然是,如果我必须像我在问题中提到的那样做。我仍然会被卡住。 – lbrahim
我个人会在助手上做这个,而不是局部的,因为你的代码会更干净。使用局部属性,你仍然必须编写属性的枚举逻辑,如果你想扩展属性值的显示方式,你可能会发现局部变得非常有意思。 – Nico
谢谢。我认为现在和Helper一起去。真的很感谢你的帮助:)但是为了争辩,如果我使用Helpers,那么我错过了在'PartialView'中获得的格式和语法突出显示。输出字符串作为代码是噩梦。 – lbrahim