模型MVC 5中的动态MaxLength

问题描述 投票:0回答:2

我的情况是客户名称的最大长度取决于业务角色。

通常的方式是

public class Customer { 
[DisplayName("Name")]
[Required]
[MaxLength(20)]
public string customer_name{ get; set; }}

如您所见,我将客户名称的最大长度设置为20。可以根据业务角色更改运行时的最大长度吗?

asp.net-mvc model
2个回答
0
投票

没有使用属性,没有。您必须进行自定义验证。在最简单的级别,您可以在操作中执行以下操作:

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数据注释。

但是,这个特定的数据注释控制的不仅仅是验证;它还会影响数据库中列的长度(这是您无法动态更改它的另一个原因)。因此,如果您想在数据库级别进行限制,则必须将其保留,并将其设置为任何各种角色可能具有的最大值。然后,您可以在此基础上实现自定义验证,以便在必要时将其限制为更少。


0
投票

您可以在View中设置它,只需将长度添加到模型中:

@Html.EditorFor(model => model.Text, new { htmlAttributes = new { @class = "form-control", maxlength = @Model.MaxLength } })

从技术上讲,这仅限制用户可以在文本框中键入的字符数,但如果需要,您可以添加其他验证服务器端。

© www.soinside.com 2019 - 2024. All rights reserved.