FineUI 官方论坛

标题: 【已确认】CheckBoxFor提交获取不到值 [打印本页]

作者: SNYG    时间: 2019-3-21 16:44
标题: 【已确认】CheckBoxFor提交获取不到值
CheckBoxFor提交数据,5.3版本之前是可以获取值的,现在5.4获取不到值了,如果布尔类型可为空时,传递的FormCollection取到的key为AtSchool.Value,前台指定的ID无效;如果布尔类型为空,传递得到的值始终为False,代码已重现



作者: sanshi    时间: 2019-3-21 22:34

已收到你基于空项目重现示例,多谢。

前台代码:
  1. F.CheckBoxFor(m => m.AtSchool.Value)
  2.                 .ID("AtSchool")
  3.                 .Label("是否在校")
复制代码
后台代码:
  1. [HttpPost]
  2. [ValidateAntiForgeryToken]
  3. public ActionResult btnSave_Click(MsStudent model, FormCollection fc)
  4. {
  5.         if (ModelState.IsValid)
  6.         {
  7.                 string message = (model.AtSchool == null ? "值为空" : "值为" + model.AtSchool.ToString());
  8.                 Alert.ShowInTop(message);
  9.         }
  10.         return UIHelper.Result();
  11. }
复制代码




这个不能算是BUG,应该是新特性引起的不兼容情况。因为 v5.4.0 中有个新增的改动
+TextBoxFor支持二级属性,生成的ID将点号替换为下划线(KK.Leung-21940)。
        -为表单字段增加Name属性(用于对提交到服务器的表单数据进行标识)。
        -比如:F.NumberBoxFor(m => m.Score.Chinese),自动生成的控件ID为Score_Chinese。
        -比如:自动生成的表单字段名称(input[name])为Score.Chinese(和ASP.NET Core默认行为保持一致)。
        -新增示例:其他杂项->数据模型->表单控件(二级属性)。

也就是说现在ID属性和Name属性是分开设置的。

针对这个示例,默认的Name是从表达式计算的,也就是:AtSchool.Value
1. 在 v5.3.0 中,如果设置 ID("AtSchool"),那么表单字段的ID和Name都是 AtSchool
2. 在 v5.4.0 中,如果设置 ID("AtSchool"),那么表单字段的ID是 AtSchool,而Name会从表达式获取,也就是 AtSchool.Value

从而导致后台参数绑定失败。解决办法是把前台代码改为:
  1. F.CheckBoxFor(m => m.AtSchool.Value)
  2. .ID("AtSchool")
  3. .Name("AtSchool")
  4. .Label("是否在校")
复制代码




=====================
可惜的是,v5.4.0中无法在视图中设置表单字段的Name属性,这个地方程序写漏了,最近我会出小版本更新,支持这个Name属性的设置。


作者: SNYG    时间: 2019-3-22 08:29
sanshi 发表于 2019-3-21 22:34
已收到你基于空项目重现示例,多谢。

前台代码:

期待尽快实现Name属性,现在程序已经改为5.4版本了,不想再该回去了
作者: SNYG    时间: 2019-5-6 17:21
sanshi 发表于 2019-3-21 22:34
已收到你基于空项目重现示例,多谢。

前台代码:

啥时候出新版本?




欢迎光临 FineUI 官方论坛 (https://www.fineui.com/bbs/) Powered by Discuz! X3.4