0

ログインアクション用のLoginModelがありますが、HTMLのみを使用したいと考えています。

例...

パブリッククラスLoginModel
{{
  [必須]
  public string Email {get; set; }
}

私のHTMLには、
<input type = "text" value = "" name = "Email">

これは、HTMLをデータベースに保存するためです。問題は、Html.ValidationSummary()を使用せずにモデル検証を取得する方法です。

ただできることを望んでいた

<div class = "validation-summary-errors"> </ div>

これはHTMLにあるものですが、機能しません。

アイデア?

4

1 に答える 1

1

HTMLを保存する場所に関係なく、検証はクライアント側で行われます。仮想パスプロバイダーを使用してビューを別の場所(DB)に保存する方法については、さまざまな投稿がありますが、検証は引き続き正常に機能します。私はそれがあなたのために機能しない理由を見逃していると思うので、あなたがあなたのビューを見つけるためにパスプロバイダーを使用していないことを想像する必要があります。

編集

Divにメッセージを挿入したいようです。パスプロバイダーで魔法を使わない限り、これは自動的には起こりません。ビューで独自のヘルパーメソッドを使用して、ハッキングを回避するか、デフォルトで提供されているものを使用します。本当にやりたい場合は、コントロールレットでビューをレンダリングし、置き換えるDivパターンを検索します。 css要素を削除するカスタムValidationForMessageヘルパー

ダリンの方法に注意してください

var expression = ExpressionHelper.GetExpressionText(ex);
    var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
    var modelState = htmlHelper.ViewData.ModelState [modelName];

コントローラのViewContextにアクセスしないと、ビューのhtmlのみをレンダリングできます。ただし、ビューのどこかに、エラーコレクションをViewDataに貼り付けるためのヘルパーメソッドが必要です(私が知る限り)。

仮想パスプロバイダーは、このヘルパーメソッドをビューテキストに挿入して、Razorが解析できるようにする必要がある場合があります。実は-当たり前。これははるかに簡単かもしれません。プロバイダーは、データベースからhtmlを読み取り、divを見つけて、そのdivに@Html.ValidationSummaryを挿入するだけでよい場合があります。これでうまくいくと思います。とにかく(本質的に)最終的にそこに行き着くのであれば、検証の要約をそこに入れてみませんか?

于 2011-10-18T21:16:56.600 に答える