问题描述
我正在处理多视图的大表单。由于我使用 db.Entry(model).State = EntityState.Modified
,因此我需要通过隐藏字段将所有字段传递给请求。我有 30 多个字段。我需要一种干净的方法来生成所有隐藏字段(因为它们将在所有视图中使用)。
我发现了一篇关于使用反射的帖子:How to make hidden fields for model automatically?
它似乎有一段时间运行良好,但是当我在数据库中添加新字段(首先是 db)时,我需要在表单中手动添加隐藏字段,因为即使隐藏字段存在,我的 ModelState 也永远不会有效.我想知道我是否做错了什么,或者我是否只是使用了其他方法。
这是我的反射方法
public static class ReflectionHelper
{
public static void IterateProps(Object obj,string baseProperty,ref Dictionary<string,object> properties)
{
if (obj != null)
{
var baseType = obj.GetType();
var props = baseType.GetProperties();
foreach (var property in props)
{
var name = property.Name;
var propType = property.PropertyType;
if (propType.Name != "ICollection`1" && (propType.Name == "String" || propType.Name == "Int32" || propType.Name == "Boolean"))
{
if (propType.IsClass && propType.Name != "String")
{
IterateProps(property.GetValue(obj,null),property.Name,ref properties);
}
else
{
properties.Add(name,property.GetValue(obj,null)??"");
}
}
}
}
}
}
以及如何在我的表单中使用它。
@using (Html.BeginForm())
{
//Form fields...
var properties = new Dictionary<string,object>();
ReflectionHelper.IterateProps(Model,Model.GetType().Name,ref properties);
foreach (var property in properties)
{
<input type="hidden" id="@property.Key" name="@property.Key" value="@property.Value" />
}
// Here is a case i needed to add fields.
@Html.HiddenFor(model => model.RapportIncident.FirstOrDefault().FK_Blessure); //int
@Html.HiddenFor(model => model.DateCreation) // datetime
<input type="submit" value="Suivant" class="btn btn-default" style="background-color:
#eeeeee;border-color: blue;" />
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)