视图模型:
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 规范的理解是它被编码为 CR LF。当我调试处理这个视图模型的帖子的控制器操作时,这肯定是我看到的。
但是,当通过 javascript 读取输入值时,换行符会因浏览器而异(IE6-8 似乎提供 CRLF,而 Windows 上的 Chrome 和 Firefox 最近构建只提供 LF)。
这意味着如果您输入带有换行符的文本,jquery 验证器将允许他们看到的内容,例如 498 个字符,但是当它到达模型绑定时,它已被转换为 504 并且 ModelState.IsValid 是(正确)错误的。
有人对纠正这个问题的最佳/最简单方法有任何想法吗?