私のasp.net mvcアプリケーションでこの問題があります。テキストエリアの改行文字がC#のテキスト長を増加させます
私のモデルの1つに「Description」というフィールドがあります。このフィールドのデータベース列はNVarchar(300)
に設定されています。
私の見解では、次のようなテキスト領域を作成しています。
@Html.TextAreaFor(m => m.Description, new { maxlength = "300" })
クライアント側の検証に「jquery.validate.unobtrusive.min.js」を使用しています。したがって、ユーザーがテキストエリアに入力すると、コンテンツの長さが300文字を超えると、「300文字以内の文字を入力してください」というメッセージが表示されます。
次のようなsceanarioが来るまで、すべてうまく動作します。 ユーザは、次のデータをテキスト領域に入力します。
f
f
f
f
f
f
f
f
sdfa
(このコンテンツは、8つの新しい行を有する)「目立たない」の検証によれば、このコンテンツは、長さ300 (単一文字として各改行「\ n」をカウント)を有する
ので、検証が通過ページの投稿が返されます。
私のC#コードでは、エンコードのために、同じ内容が長さ308 になります(新しい行 "\ r \ n"は2文字として計算されます) ternはデータベース操作に失敗します。文字。
この特定の不動産にStringLength
属性が必要であると言っている人は、次の理由があります。
この属性を設定した場合、クライアント側の検証はこの特定のプロパティでは発生せず、サーバーに送信されます。モデルが有効でないため、エラーメッセージとともにページに戻ります。
これにはどのような解決策がありますか教えてください。
スプリットは私にとってはうまく機能しませんでした。あなたのメソッドを使って数えられなかった行末改行に問題がありました。 私はこれを代わりに使用しました: '//改行文字を2つのスペースで置き換えて、サーバのカウントに一致させます。 var replacedValue = value.replace(/(\ n)/ gm、 ""); return replacedValue.length; ' 注:コードブロックは何とか2つあるはずのスペースを1つしか表示しません。 – Ben