私のasp.net mvcアプリケーションでこの問題が発生しました。
私のモデルの1つに「説明」フィールドがあります。このフィールドのデータベース列は に設定されてい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
(このコンテンツには 8 行の改行があります)
「目立たない」検証によると、このコンテンツの長さは 300 (改行「\n」を 1 文字としてカウント)であるため、検証に合格し、ページがポストバックされます。
私のC#コードでは、エンコーディングにより、同じコンテンツが長さ308になり(新しい行「\r\n」を2文字としてカウント)、300文字しか許可されないため、データベース操作に失敗します。
この特定のプロパティに属性が必要だと誰かが言っている場合、StringLength
属性を持たないのには次の理由があります。
この属性を配置すると、この特定のプロパティに対してクライアント側の検証が行われず、サーバーに送られ、モデルが有効でないため、エラー メッセージが表示されたページに戻ります。
これに対する可能な解決策を教えてください。