FineUI 官方论坛
标题:
下拉列表的MaxLength属性是对显示文本的验证(而非值)
[打印本页]
作者:
kingdawn2015
时间:
2017-3-6 21:01
标题:
下拉列表的MaxLength属性是对显示文本的验证(而非值)
我在新增数据的窗口中有一个下拉列表项,用来提交用户性别
页面代码是这样的:
F.DropDownListFor(m => m.Gender)
.DataTextField("Name")
.DataValueField("Code")
.SelectedValue("")
.DataSource(ViewBag.P_Gender)
P_Gender是保存性别代码的数据表,其类定义为:
public class P_Gender
{
[Key]
[Display(Name = "代码")]
[StringLength(1)]
public string Code { get; set; }
[Display(Name = "名称")]
[StringLength(40)]
public string Name { get; set; }
}
后台提供了ViewBag.P_Gender的数据,页面初始化后,下拉列表显示正常。在提交数据时,在下拉列表中选中一项,如:“男”或“女”,然后保存,也一切正常,看了一下数据库,保存到表中的其实是代码 “0” 或 “1”,目前看起来一切符合要求。
问题是:如果下拉列表中“Name”字段宽度超过了“Code”字段的宽度,比如我将性别的“Name”字段中的“男”和“女”分别改为为“男人”和“女人”,“Code”字段内容仍然是“0” 和 “1”,这时在保存时将会提示“性别”宽度大于1,无法正常提交。
按理说既然提交到数据库的内容是“0”或“1”,和下拉列表中Text项的宽度应该是无关的,只要限制提交的Value项宽度就可以了, 这个地方显然同时限制了Text项的宽度。
谢谢!
作者:
sanshi
时间:
2017-3-6 23:06
这个地方确实有瑕疵。FineUI的 MinLength 和 MaxLength 验证规则是对下拉列表的显示文本而言的,而不是值。这一点也和开源版保持一致。
这个是长期以来一致存在的规则不能改,否则之前的老程序可能出问题。
现在只有这样修正:
F.DropDownListFor(m => m.Gender)
.DataTextField("Name")
.DataValueField("Code")
.SelectedValue("")
.DataSource(ViewBag.P_Gender)
.MaxLength(40) // MaxLength是对文本的限制
复制代码
来覆盖 DropDownListFor 自动生成的 MaxLength 属性。
作者:
kingdawn2015
时间:
2017-3-6 23:38
哦,原来如此,好在有解决的办法,多谢
欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/)
Powered by Discuz! X3.4