我的情况是客户名称的最大长度取决于业务角色。
通常的方式是
public class Customer {
[DisplayName("Name")]
[Required]
[MaxLength(20)]
public string customer_name{ get; set; }}
如您所见,我将客户名称的最大长度设置为20。可以根据业务角色更改运行时的最大长度吗?
没有使用属性,没有。您必须进行自定义验证。在最简单的级别,您可以在操作中执行以下操作:
if (model.role == "Foo" && model.customer_name.Length > 20)
{
ModelState.AddModelError("customer_name", "Name must be less than or equal to 20 characters");
}
if (ModelState.IsValid)
{
...
然后,您只需删除MaxLength
数据注释。
但是,这个特定的数据注释控制的不仅仅是验证;它还会影响数据库中列的长度(这是您无法动态更改它的另一个原因)。因此,如果您想在数据库级别进行限制,则必须将其保留,并将其设置为任何各种角色可能具有的最大值。然后,您可以在此基础上实现自定义验证,以便在必要时将其限制为更少。
您可以在View中设置它,只需将长度添加到模型中:
@Html.EditorFor(model => model.Text, new { htmlAttributes = new { @class = "form-control", maxlength = @Model.MaxLength } })
从技术上讲,这仅限制用户可以在文本框中键入的字符数,但如果需要,您可以添加其他验证服务器端。