最近开发一个项目,model非常多,在做前端的时候发现一个问题,要单独创建每个字段对应的html太麻烦了。就想到个简单办法,根据model创建html。完美解决我的问题。
public static class ModelToHtmlHepler
{
public static string ToHtml<T>(T t) where T : new()
{
PropertyInfo[] propertys = t.GetType().GetProperties();
string aaa = t.ToString().Replace("Scenic.DomainModel.Model.","") +":";
foreach (PropertyInfo property in propertys)
{
var proName = property.Name;
if (proName != "OnCreated" && proName != "OnLastUpdated" && proName != "State")
{
var basehtml = "<div class=\"layui-form-item\">"
+"<label class=\"layui-form-label\">"+ proName + "</label>"
+"<div class=\"layui-input-block\">"
+ NeneryHtml(property, proName)
+ "</div>"
+ "</div>";
aaa = aaa + basehtml;
}
}
return aaa;
}
public static string NeneryHtml(PropertyInfo property,string idname)
{
string aaa = "";
if (property.PropertyType.ToString() == "System.Boolean")
{
aaa = "<select name=\""+idname+"\" id=\""+idname+"\">"
+"</select > ";
}
else if (property.PropertyType.ToString() == "System.Int64" || property.PropertyType.ToString() == "System.Int32"|| property.PropertyType.ToString() == "System.String"|| property.PropertyType.ToString() == "System.Double")
{
aaa = "<input type=\"text\" name=\""+idname+"\" id=\""+idname+"\" lay-verify=\""+idname+"\" autocomplete=\"off\" placeholder=\"\" value=\"\" class=\"layui-input\">";
}
//else if (property.PropertyType.ToString() == "System.String")
//{
// aaa = "<div>string</div>";
//}
//else if (property.PropertyType.ToString() == "System.String")
//{
// aaa = "<div>time</div>";
//}
//else if (property.PropertyType.ToString() == "System.Double")
//{
// aaa = "<div>Double</div>";
//}
else
{
if (property.PropertyType.ToString() == "Scenic.DomainModel.Model.AdminUsersRoleEnum")
{
aaa = "<select name=\"" + idname + "\" id=\"" + idname + "\">"
+ EnumEntity<AdminUsersRoleEnum>()
+ "</select > ";
}
else if (property.PropertyType.ToString() == "Scenic.DomainModel.Model.ScenicStatusEnum")
{
aaa = "<select name=\"" + idname + "\" id=\"" + idname + "\">"
+ EnumEntity<ScenicStatusEnum>()
+ "</select > ";
}
else if (property.PropertyType.ToString() == "Scenic.DomainModel.Model.FenRunEnum")
{
aaa = "<select name=\"" + idname + "\" id=\"" + idname + "\">"
+ EnumEntity<FenRunEnum>()
+ "</select > ";
}
else
aaa = property.PropertyType.ToString();
}
return aaa;
}
public static string EnumEntity<T>() where T : Enum
{
var enumstr = "";
Type enumType = typeof(T);
Array values = Enum.GetValues(enumType);
foreach (var item in values)
{
var itemenum = (T)item;
enumstr = enumstr + "<option value=" + (int)item + ">" + itemenum.ToDescriptionOrString() + "</option>";
}
return enumstr;
}
中间生成html的部分可以根据自己的需要进行修改。我这里前端用的layui,所有是根据layui的结构设定的。
上面只是初步代码实现 ,如果想再生成完整的html ,可以在此基础上进行修改可生成完整的html页面。