【问题标题】:How can I set MAXLENGTH on input fields automatically?如何自动在输入字段上设置 MAXLENGTH?
【发布时间】:2011-01-28 16:23:48
【问题描述】:

我正在使用 ASP.NET MVC RC2。我有一组自动生成的“Linq-to-SQL 类”类,其中每个类都为我的数据库中的一个表建模。我有一些默认的“编辑”视图,它们使用整洁-o Html.TextBoxFor 辅助扩展来呈现表格中列的 HTML 输入字段。

但是,我注意到生成的 HTML 中没有指定 MAXLENGTH 属性。一个快速的 google 显示您可以使用 TextBoxFor 等添加显式属性,但这意味着我需要对值进行硬编码(并且我需要记住对每个输入都执行此操作)。

考虑到所有内容都是直接从数据库自动生成的,所以这看起来很糟糕,所以列的大小是已知的。 (不过,公平地说,Web 端的东西必须与任何模型对象一起工作,而不仅仅是 Linq-to-SQL 对象)。

有什么好方法可以让它做正确的事吗?

【问题讨论】:

标签: asp.net-mvc visual-studio-2008 linq-to-sql


【解决方案1】:

我不会担心您的 html 元素上的最大长度属性,这是一种错误的安全感。

我要做的是将StringLengthattribute 添加到您需要最大长度验证的字段中。这将自动为您提供长度的服务器端验证,如果您愿意,还为您提供长度的客户端验证。

如果您需要有关 ASP.NET MVC 2 新使用的数据注释验证属性的更多信息,请阅读此blog post by Scott Gu

此外,您可能需要为生成的 Linq to SQL 类使用伙伴类...在这种情况下,您可以阅读blog post I wrote about it

HTH,
查尔斯

【讨论】:

  • 谢谢,顾的帖子很有帮助。然而,仍然非常令人失望的是,我不仅要创建伙伴类,还要明确指定所有字段长度。 “Linq-to-SQL 类”生成器在检查我的数据库时知道所有这些信息。为什么它没有将这些属性添加到生成的类中?必须重复这些东西是干的! (不是你的错,我知道)。
  • 题外话:我不同意 HTML 元素上的 MAXLENGTH 不值得拥有 - 它可能对安全性没有帮助,但至少它可以帮助用户不输入 2 个页面,后来才被告知他只是允许 10 个字符...
  • 点了。就我个人而言,我为此使用客户端验证,这会照顾用户稍后发现,也有助于不重复逻辑。但是在 JS 被禁用的情况下,MAXLENGTH 会在他们获得服务器之前完成这项工作。
【解决方案2】:

使用 MVC/jQuery 时,您可以简单地将 data-val-maxlength-max 重新应用为 JavaScript/TypeScript 中的 maxlength:

$container.find('[data-val-maxlength-max]')
    .each((index, item) => {
        var $this = $(item);
        var maxLength = $this.attr('data-val-maxlength-max');
        $this.attr('maxlength', maxLength);
    });

【讨论】:

    【解决方案3】:

    Charles,我今天早上遇到了同样的问题,并找到了解决方案。 Here's the blog post with the source code.

    【讨论】:

    • 虽然恕我直言,链接到自写的博客文章本身并没有错,但为什么不在此处的答案中包含内容呢? (可能在链接中注明“如我的博客上所述”)您的博客文章的长度不是很长,以至于无法包含在此答案中,并且可以很好地保持所有内容的独立性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2022-01-23
    • 2013-09-29
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多