处理FormCollection字段的帮助类

Posted 五兆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理FormCollection字段的帮助类相关的知识,希望对你有一定的参考价值。

 1         /// <summary>
 2         /// 利用反射机制将formCollection中的键值对的值赋值给对象对应属性,并确保类型一致性
 3         /// </summary>
 4         /// <typeparam name="T">实体泛型</typeparam>
 5         /// <param name="t">外部操作的全新的实体ref</param>
 6         /// <param name="form">form表单</param>
 7         /// <returns></returns>
 8         public static int ToModel<T>(ref T t, IFormCollection form)
 9         {
10             int u = 0;
11             var pi = t.GetType().GetProperties();
12             foreach (var p in pi)
13             {
14                 if (form.TryGetValue(p.Name, out StringValues vs))
15                 {
16                     try
17                     {
18                         if (vs.ToArray()[0] == "undefined")
19                             continue;
20                         p.SetValue(t, Convert.ChangeType(vs.ToArray()[0], p.PropertyType), null);//反射赋值给对象的属性,同时转换类型
21                         u++;
22                     }
23                     catch (Exception ex)
24                     {
25                         NLogHelper.Error(ex.Message);
26                     }
27                 }
28             }
29             return u;
30         }

使用

 1         /// <summary>
 2         /// 测试Formdata向Model转换
 3         /// </summary>
 4         /// <param name="formData"></param>
 5         /// <returns></returns>
 6         [HttpPost]
 7         public IActionResult FormDataToModel([FromForm]IFormCollection formData)
 8         {
 9             var view = new TestModel();
10             FormDataHelper.ToModel(ref view, formData);
11             return new JsonResult(view);
12         }
13         class TestModel
14         {
15             public int IntVal { get; set; }
16             public string StringVal { get; set; }
17             public double DoubleVal { get; set; }
18             public float FloatVal { get; set; }
19             public DateTime DateTimeVal { get; set; }
20 }

测试方法

 

 转换结果

 

 

TODO:

后续研究一下需要增加List类型或泛型的转换

以上是关于处理FormCollection字段的帮助类的主要内容,如果未能解决你的问题,请参考以下文章

FormCollection 缺少提交按钮值 [重复]

如何从FormCollection返回对象列表?

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式