FineUI 官方论坛

标题: 【非BUG】DropDownListFor加了ID后无法加载到Model [打印本页]

作者: KK.Leung    时间: 2017-5-25 11:28
标题: 【非BUG】DropDownListFor加了ID后无法加载到Model
  1. F.DropDownListFor(k => k.F_ParentID)
  2.                                         .Label("上级部门")
  3.                                         .ShowRedStar(true)
  4.                                         //.ID("ParentDept") //加了ID无法装载到Model
  5.                                         .Required(true)
  6.                                         .DataTextField("Value")
  7.                                         .DataValueField("ID")
  8.                                         .DataSource(ViewBag.ddlDeptDS)
复制代码

这是正常的~[attach]10182[/attach]
但把ID的注释取消后,F_ParentID却变成null;
[attach]10183[/attach]

作者: sanshi    时间: 2017-5-25 11:52
ID是控件的ID,F_ParentID是你模型中的值,这两个怎么会影响?

请基于空项目重现问题,并上传可直接运行项目
作者: SNYG    时间: 2017-6-9 08:53
sanshi 发表于 2017-5-25 11:52
ID是控件的ID,F_ParentID是你模型中的值,这两个怎么会影响?

请基于空项目重现问题,并上传可直接运行项 ...

我的也出现这种问题,加上ID无法通过Model获取值,去掉就可以
作者: sanshi    时间: 2017-6-9 09:12
SNYG 发表于 2017-6-9 08:53
我的也出现这种问题,加上ID无法通过Model获取值,去掉就可以

请基于空项目重现问题,并发给客服QQ:2877408506@qq.com
作者: sanshi    时间: 2017-6-9 16:58
看到你提交的测试项目了。这不是BUG,可以看下你的Model定义:
  1. public class Student
  2.     {
  3.         public int Id { get; set; }

  4.         [Required]
  5.         [StringLength(20)]
  6.         public string Name { get; set; }
  7.         public int EntranceYear { get; set; }
  8.         public bool AtSchool { get; set; }
  9.         public string Major { get; set; }
  10.         public int Group { get; set; }

  11.         
  12.         [Required]
  13.         [StringLength(2)]
  14.         public string Gender { get; set; }
  15.         public DateTime LogTime { get; set; }
  16.         public string Desc { get; set; }
  17.     }
复制代码


前台定义:
  1. F.DropDownListFor(m => m.Gender)
  2.                 .ID("ddlGender").
  3.                 .Label("性别")
  4.                 .Items(
  5.                     F.ListItem()
  6.                         .Text("请选择")
  7.                         .Value(""),
  8.                     F.ListItem()
  9.                         .Text("男")
  10.                         .Value("1"),
  11.                     F.ListItem()
  12.                         .Text("女")
  13.                         .Value("2"),
  14.                     F.ListItem()
  15.                         .Text("对外保密")
  16.                         .Value("3")
  17.                 )
复制代码
提交到后台时,表单数据里面是 ddlGender ,而不是 Gender。
[attach]10239[/attach]

而这个 ddlGender 无法映射到 Student 中的 Gender 属性,因此下面代码:
  1. [HttpPost]
  2.         [ValidateAntiForgeryToken]
  3.         public ActionResult StudentTest_btnSave_Click(Student model)
  4.         {
  5.             if (ModelState.IsValid)
  6.             {

  7.             }

  8.             return UIHelper.Result();
  9.         }
复制代码


就拿不到 model.Gender 的值。





因此遇到这个问题,有两个处理办法:
1. 后台想用自动模型绑定时,前台就不要设置ID的值,会自动用模型的名称作为ID值
2. 前台自定义ID,则后台就不能用自动模型绑定,类似:
  1. [HttpPost]
  2. [ValidateAntiForgeryToken]
  3. public ActionResult StudentTest_btnSave_Click(string ddlGender)
  4. {
  5.         

  6.         return UIHelper.Result();
  7. }
复制代码







作者: KK.Leung    时间: 2017-6-10 08:25
  1. [HttpPost]
  2.         [ValidateAntiForgeryToken]
  3.         public ActionResult StudentTest_btnSave_Click(Student model,string ddlGender)
  4.         {
  5.             if (ModelState.IsValid)
  6.             {
  7.                         model.Gender = ddlGender;
  8.                         ......
  9.             }

  10.             return UIHelper.Result();
  11.         }
复制代码


如果我想保留ID,改成这样可以吗?
作者: sanshi    时间: 2017-6-10 11:57
KK.Leung 发表于 2017-6-10 08:25
如果我想保留ID,改成这样可以吗?

可以




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