gpt4 book ai didi

jquery - 使用 ASP MVC 和 jquery 不显眼的验证处理 textarea 元素中的换行符

转载 作者:行者123 更新时间:2023-12-01 04:57:24 24 4
gpt4 key购买 nike

View 模型:

public class ViewModel
{
[Display(Name = "Message")]
[StringLength(500, ErrorMessage = "Your message must be {1} characters or fewer.")]
public string Message { get; set; }
}

查看(摘录):

<div class="form-field-group">
@Html.LabelFor(m => m.Message , "Your message:")
@Html.TextAreaFor(m => m.Message )
@Html.ValidationMessageFor(m => m.Message )
</div>

我还在 web.config 中使用了不引人注目的验证:

<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

绝对是教科书上的东西,而且看起来效果非常好。

问题!

所以我对HTML spec for line breaks in form data的理解是它被编码为 CR LF。这肯定是我在调试处理此 View 模型的帖子的 Controller 操作时所看到的。

但是,当通过 javascript 读取输入的值时,换行符会根据浏览器的不同而有所不同(IE6-8 似乎给出 CRLF,而 Windows 上的 Chrome 和 Firefox 最近版本只给出 LF)。

这意味着,如果您输入带换行符的文本,jquery 验证器将允许通过它们所看到的 498 个字符,但当它到达模型绑定(bind)时,它已转换为 504 并且 ModelState.IsValid 为(正确)错误。

有人知道纠正这个问题的最好/最简单的方法吗?

最佳答案

MVC 不显眼的验证 (jquery.validate.unobtrusive.js) 使用 jquery.validate.js。

因此,解决此问题的最简单方法是更改​​ jquery.validate.js 中 maxlength 的行为(这是 jquery.validate.unobtrusive.js 通过其适配器附加的内容)。

下面的代码将更改 maxlength 并解决问题:

(function ($) {

if ($.validator && $.validator.methods && $.validator.methods.maxlength) {

$.validator.methods.maxlength = function (value, element, param) {
if (typeof value === 'string') {
value = value.replace(/\r?\n/g, "\r\n");
}

var length = $.isArray(value) ? value.length : $.validator.prototype.getLength($.trim(value), element);
return $.validator.prototype.optional(element) || length <= param;
};
}

})(jQuery);

需要注意的是,这不会在非 Windows 平台上导致问题(或导致不同的问题)http://en.wikipedia.org/wiki/Newline

您还可以通过创建自己的验证属性并实现 IClientValidatable 添加您自己的客户端验证来解决此问题 http://www.falconwebtech.com/post/2012/04/21/MVC3-Custom-Client-Side-Validation-with-Unobtrusive-Ajax.aspx 。这样做的缺点是记住使用您的属性而不是标准的 StringLength 属性。您必须决定什么最适合您的情况。

关于jquery - 使用 ASP MVC 和 jquery 不显眼的验证处理 textarea 元素中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com