当我通过实体框架中的反射传递输入时,ModelState 无效

问题描述

我正在处理多视图的大表单。由于我使用 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 (将#修改为@)