問題タブ [modelmetadata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
25080 参照

c# - モデルのプロパティで必要な属性をオーバーライドすることは可能ですか?

モデルに設定された [Required] 属性をオーバーライドできるかどうか知りたいです。この問題には簡単な解決策があると確信しています。

0 投票する
3 に答える
5249 参照

asp.net-mvc-3 - AutoMapperを使用してビューモデルにメタデータを運ぶための手法

AutoMapperを使用して、ドメインオブジェクトをビューモデルにマップします。ドメインレイヤーにメタデータがあり、ビューレイヤーとModelMetadataに引き継ぐ必要があります。(このメタデータはUIロジックではありませんが、ビューに必要な情報を提供します)。

今のところ、私の解決策は、(ASP.NET MVCとは独立して)別のMetadataProviderを使用し、規則を使用して、AssociatedMetadataProviderを介して関連するメタデータをModelMetadataオブジェクトに適用することです。このアプローチの問題は、AutoMappingを使用する場合と同じように、ドメインからModelMetadataをバインドするときに同じ規則をテストする必要があることです。これを、より直交させる方法があるはずです。誰かがこれを達成するためのより良い方法をお勧めできますか?

0 投票する
2 に答える
3085 参照

asp.net-mvc - DataAnnotations を参照できるカスタム Html ヘルパー

このようなモデルがあるとします

次のようなHtmlヘルパーを作成したい:

次のように、jQuery Vaidation プラグインが検証できる正しい形式のテキスト フィールドを吐き出すようにします。

私の調査によると、MetaDataModel 内のすべてのデータ注釈を反復処理して、どれが jQuery Validation に適用できるかを確認する方法はないようです。

疑似コードでの動作をどのように想像するか:

このようなヘルパーを実現するにはどうすればよいでしょうか? 検証リテラルを複製する必要がないように、データ注釈で機能するようにします。

たとえば、TextEditorFor などの現在の Html ヘルパーは、有効な属性を出力フィールドに追加します。どのようにこれを行い、どうすれば独自の実装を作成できますか?

乾杯

0 投票する
1 に答える
1740 参照

asp.net-mvc - ASP.NET MVC 3 のモデル メタデータ プロバイダーは動的メタデータをサポートしていますか?

ASP.NET MVC 3 でいくつかのカスタム モデル メタデータを実装しようとしています。一部のメタデータは構成された値に基づいて変更される可能性があるため、データ注釈属性を使用できません。そのため、メタデータを設定できるソリューションが必要です。すべてのリクエスト。カスタム モデル メタデータ プロバイダーについて読んでいますが、動的メタデータ シナリオのサポートについては何も見つかりません。

MVC フレームワークは、モデル メタデータ プロバイダーからのメタデータをキャッシュしますか?それとも、すべての要求で CreateMetadata メソッドが呼び出されますか? カスタム モデル メタデータ プロバイダーは、動的メタデータの優れたソリューションですか?それともビュー モデルに配置するだけでよいですか?

編集:これは必ずしも私が話している検証メタデータではないため、検証固有のソリューションを探しているわけではありません。ビューによって表示または使用される単なるメタデータである可能性があります (たとえば、HTML 5 データ属性)。

もう 1 つの例は、データベース主導のフィールド ラベルです。通常、Display 属性の Name プロパティを使用しますが、データベース内の値に基づいて表示名を動的に設定する場合、これは機能しません。

0 投票する
1 に答える
232 参照

asp.net-mvc-3 - 複雑なオブジェクトにモデル メタデータを適用する

次のシナリオがあります

EditorFor を使用するときに、DateTime に DataFormatString を適用したい

上記のコードは、DisplayFormatAttribute を使用して日付を正しくレンダリングしません。どうすればこれを解決できますか?

0 投票する
1 に答える
927 参照

asp.net-mvc-3 - モデルのリスト内のアイテムの完全な Html フィールド名をコントローラ レベルで取得するにはどうすればよいですか?

*初投稿

使用する必要がある Ajax 投稿用の JQuery エラー ハンドラーがあります。このように、その要素のフィールド名に基づいて html にエラーを追加します。

これは、次のようにコントローラ レベルでカスタムのモデル状態エラーを追加しようとするまで、流暢な検証設定ですぐに使用できます。

問題は、modelstate エラーを、魔法の文字列「City」ではなく、html フィールド名に添付する必要があることです。html name プロパティは MVC で生成され、次のようになります。

以前にhtmlヘルパーでこの問題に遭遇し、次の方法を使用しました:

その場合に私の問題を解決しました。

私の質問は、MVC ポスト アクションのモデル プロパティでこのメソッドを使用して、元の html name プロパティを取得できますか?

前もって感謝します

0 投票する
2 に答える
521 参照

asp.net-mvc - Validation Application Block - 検証メタデータ クラスの使用方法

VAB を使用していくつかのクラスを属性で検証しており、メタデータ クラスを使用して異なるクラス間で同じ検証を共有しています。コントローラーでオブジェクトを検証しようとすると (私は asp.net mvc を使用しています)、ValidationResultsエラーは発生せず、エンティティは有効ではありません。しかし、ASP.NET MVCModelState.IsValidは false であるため、魔法のように機能します。問題は、手動検証のやり方にあると思います。

Global.asax では、クラスとメタデータ クラスの間の関連付けを読み込んでいます。

グローバル.ASAX

コントローラ

また

どんなアイデアでも大歓迎です。

ありがとうございます。

0 投票する
2 に答える
2803 参照

c# - 動的にビルドされた MVC3 ViewModel に MetaData を追加する方法は?

私が取り組んでいるプロジェクトの重要な機能の 1 つは、ユーザーが既存のフィールド タイプ (よく知られているタイプなど) のプールに基づいてフォームを構成できることです ("フォーム" のように)。 「ユーザー名」、「生年月日」などだけでなく、「文字列」、「DateTime」などの「ジェネリック型」もあります)。

以前は、「よく知られている」型に対して正常に機能する静的な ViewModel があり、次のように見えました。

すべての既知のプロパティがリストされ、コンテキストに応じてそれらを表示または非表示にしていました。

しかし、最後の要件が来て、すべてが変わりました。ユーザーは、必要な数のジェネリック型フィールドを追加できるようになりました。これを行うために、この InputModel を完全に動的にすることにしました。次のようになります。

これは魅力のように機能します。Razor ビューは、コレクションを反復処理し、コレクションの各プロパティに対応するコントロールを標準以上の方法で作成するだけで済みます。

...そして、入力されたフォームとしてデータをうまく取得します。

=> これは問題なく動作しますが、クライアント側の検証はありません。このためには、いくつかのメタデータが必要になります...モデルを動的に作成しているため、注釈を介してはもうありません。

これらの MetaData を提供するために、CustomModelMetadataProvider継承するを作成し、Global.asaxDataAnnotationsModelMetadataProviderに新規登録しました。ModelMetadataProviderこのCreateMetadata()関数は、ViewModel の作成時に呼び出され、ViewModel の各プロパティに対して呼び出されます。

問題の始まり: 現在のプロパティにいくつかのメタデータを追加するには、まず、現在見ているプロパティを特定する必要があります (「名前」の最大長は 200 ですが、「生年月日」はそうでないため、割り当てることができません)。デフォルトではすべてのプロパティに maxlength があります)。Valueそして、すべてのプロパティが同じ名前と同じコンテナタイプを持っているため、どういうわけかまだそれを行うことができませんでしたModelProperty

リフレクションを介してプロパティのコンテナーにアクセスしようとしましたが、ModelAccessor のターゲットは ViewModel 自体であるため (ラムダ式のためm => m.Properties)、次の構成により、ModelProperty だけでなく ViewModel 全体が得られます。

これを何度もめくっていますが、手元にある ModelProperty を特定する方法が見つかりません。これを行う方法はありますか?

更新:しばらくあらゆる方向にこれをひっくり返した後、最終的に別の方向に進みました。基本的に、控えめな JavaScript を使用して、属性やメタデータに触れることなく MVC の検証機能を使用しています。value-data="true"つまり、HTML 属性(および他のすべての必須属性) を@Html.TextBoxFor()ステートメントに追加します。これは、すべてのアトミック検証 (必須、文字列長など) でうまく機能します。

0 投票する
1 に答える
3611 参照

asp.net-mvc - MVC Html ヘルパー: 文字列式からのモデルメタデータ

モデルメタデータにアクセスできる html ヘルパーを構築しようとしています。ヘルパーの両方のバージョンが機能する必要があります: 文字列式からとラムダ式から: 例:

上記のコードの問題は、複合型では機能しないことです。たとえば、モデルが次のようになっているとします。

私の html ヘルパーは、次のメタデータの読み取りに失敗します。

実際には複雑なオブジェクトで問題なく動作するため、式を取るヘルパーで機能させることもできModelMetadata.FromLambdaExpression(...)ますが、それだけでは十分ではありません。

任意の提案をいただければ幸いです。