我所遇到的情况似乎很普遍,但是迄今为止我还没有找到一个好的解决方案。因此,在后端有一个使用MSSQL数据库的ASP.NET-MVC应用程序。该模型包括一个名为A的类,其中包含一个字符串字段Description,需要限制为100个字符。声明如下:
[StringLength(100)]
public virtual string Description { get; set; }
数据库中的对应列是 nvarchar,列长度为 100。在用户界面中,描述字段通过 textarea 表示,maxlength = 100。
现在的问题是当 textarea 中存在换行时,在客户端上会将其解释为一个字符,在服务器端上则由 Environment.NewLine 表示,这是两个字符 (\r\n)。因此它超过了数据库列的长度(实际上,服务器端验证在整个后端事情之前就失败了,但出于简单起见,让我们忽略验证)。
我找到的解决方案如下:
- 在客户端上添加一些魔法,以便将文本区域中的换行符解释为两个字符。我不喜欢这个解决方案,因为它可能会让用户感到困惑。
- 在服务器端上用 \n 替换 \r\n。看起来像是一种 hack,可能会有一些副作用。
- 删除/增加数据库中的列长度。这是最简单的方法(不考虑服务器端验证问题),但假设这不是那种情况。
我想还应该有其他的解决方案。