ビューモデル:
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 は (正しく)間違い。
これを修正するための最も優れた/最も簡単な方法について何かアイデアを持っている人はいますか?