2012-04-02 5 views
3

モデルの検証には少し問題があります。オートコンプリートフィールドを使用したMVC検証

私は "theID"と呼ばれる隠しフィールドと "theDesc"というテキストボックスを持っています。 theDescフィールドはオートコンプリートで、私がそれを選択するとtheIDは保存されたIDを取得します。

theIDは、データベースに格納されたフィールドであり、「Requiered」なものであるので、私は使用:@ Html.ValidationMessage(「theID」)

問題はCSSクラスということである入力 - 検証エラーが隠しフィールドに割り当てられます。私は今、これは正常で予想通りの動作ですが、これを変更する方法はありますか?

私が達成したいのは、theDescフィールドに入力エラークラスが表示されていることです。この方法では、ユーザーは不足していることに気づくことができます。

大したことではありませんが、私のOCDは、同じスタイルですべてのエラーを取得しないことに夢中になっています。

+0

溶液。私にはたくさんの書式があります。 – epaulk

+0

IDが非表示のフィールドの場合、常に必要な属性を削除することを検討することができます – swapneel

+0

投稿を編集してより明確にしました。 – epaulk

答えて

0

オートコンプリートの変更イベントでは、その値を非表示フィールドに割り当てます。

2

良い質問と素敵なフレーズ!私はまったく同じ質問をしましたが、まだ決定的な答えはありません。少なくともサーバー側の検証では、カスタムHTMLの代わりにHTMLヘルパーを使用して、コントローラとビューにサーバー側の検証を追加することで管理しました。この投稿は、私を助け:

.input-validation-error to a textbox when the form is redisplayed for failed value

の記事で述べたように、例えば、HTMLの名前を設定する必要がありますモデルフィールドが正しく表示されます。そこで、サーバー側の検証コードをコントローラに追加しました。確認フィールドmodel.theIDがにModelState「TheDesc」で追加した名前とは異なるされている様子がわかります

コントローラーコード:

public ActionResult SomeActionIndex(SomeModel model) { 
    ... 
    if (string.IsNullOrEmpty(model.theID) { 
     ModelState.AddModelError("theDesc", "The field is uhm... required!"); 
    } 
    ... 
} 

ポストのコメントはCSSを経由して(赤枠を強調するためにあることを示していますクラス)では、jQueryの検証を自動的に有効にするため、標準のHTMLヘルパーを使用するのに役立ちます。 私のケースでは、検証されたオートコンプリートリストは、HTMLヘルパーを使用して生成されるのではなく、ネストされたビュー内のカスタムHTMLを使って生成されました。私はこれを変更しました。

ビューコード:

@Html.TextBoxFor(m => Model.theDesc, new { @class="auto-complete", 
@placeholder="choose a value..." }) 

@Html.TextBoxFor(m => Model.theID, new { @style = "display: none" }) 

注:正確にHTMLヘルパーが行う黒魔術のようなものが、私はまだ把握することができていない、この作品を作るために。だから私は後まで、または他の誰かのためにそれを残しておきますが、私はこの質問には、それに関連すると思う:私はカスタムJavaScriptまたは類似のではなく、「箱の外」ソリューションを期待しています

custom htmlhelper with validation support