我在我的asp.net mvc应用程序中遇到了这个问题。
在我的模型中,有一个字段叫做"描述"。此字段的数据库列设置为NVarchar(300)
。
在我的视图中,我按照以下方式创建文本区域。
@Html.TextAreaFor(m => m.Description, new { maxlength = "300" })
我正在使用"jquery.validate.unobtrusive.min.js"进行客户端验证。因此,当用户在文本区域中输入的内容长度超过300个字符时,会显示消息"请输入不超过300个字符"。
一切正常,直到以下情况发生。用户在文本区域中输入以下数据。
f
f
f
f
f
f
f
f
sdfa
根据“不显眼”的验证,此内容长度为300(将每个新行“\n”视为单个字符),因此验证通过并且回传页面。在我的C#代码中,由于编码的原因,相同的内容变成了308的长度(将每个新行“\r\n”视为2个字符),这导致数据操作失败,因为它仅允许300个字符。如果有人说我应该在此特定属性上使用"StringLength"属性,我有以下原因没有使用它。如果我添加此属性,则客户端验证不会发生在此特定属性上,而是转到服务器,由于模型无效,它带着错误消息返回到页面。请告诉我可能的解决方案?
//将换行符替换为2个空格以使计数与服务器匹配。 var replacedValue = value.replace(/(\n)/gm, " "); return replacedValue.length;
注意:代码块中某些地方显示了一个空格,但实际上应该是两个空格。 - Ben