2011-07-10 5 views
1

ログインフォームは永続的なフィクスチャ(非常に発展するまで)であり、時にはメインコンテンツとしての登録であるため、このログインフォームと一致します。MVC3隣接する2つのHTMLフォームに重複しているフォームバインド

今度は夕暮れゾーンに入ります:両方のフォームは異なるコントローラーで異なるアクションを持っていますが、共通の2つのものを共有しています。両方ともValidationSummaryであり、両方にUserNameというフィールドがあります。サーバー側の検証エラーが発生した場合ユーザーがチェックされていないときに表示され、ユーザーが登録しようとしている。すなわち、

ModelState.AddModelError("", "You must accept the Terms and Conditions to become a member."); 

エラーが両方のフォームの検証概要に表示され、新しいユーザー名を使用して、「使用条件を受け入れます]両方のフォームのUserNameフィールド。フォームは、共通のビューモデルタイプを共有することさえできません。これを適切にするように私が求めることができるのは、WTFだけです。

答えて

0

html要素のIDが同じ場合は、この種の動作が予想される可能性があります。私はこれのための最も簡単な解決策はあなたのログインユーザー名の名前をより明示的な1つの LoginUserNameのように名前を変更すると思う。あなたは2つの異なるものを混ぜ合わせていません。

第2に、(該当する場合は)別のフォームにログイン機能をカプセル化することをお勧めします(そうしていない場合)。ログインアクション。

+0

私はあなたの名前を変更するつもりです。しかし、私は属性の中でこれを指定する方法がないので、クライアントIDへのアクセス権がないので、検証要約にはまだ問題があります。 – ProfK

+0

クライアントIDにアクセスできない理由を説明できますか?私が知っている限り、モデルバインディング機能を使用してページ上のすべてを処理することができます。ただし、処理するプロパティがモデルクラス(@model yourmodelでページ上に表示されます)に含まれている限りです。私は正しいのでしょうか、他のあなたの問題ですか? –

+0

私はクライアントIDへの書き込みアクセスを意味します。バインディングプレフィックスに関する@ archilの提案はまだ試みていませんが、それ以外にもValidationSummaryはほとんどAPIを公開していません。 – ProfK

1

同じクライアント入力名で問題が発生しているようです。 BindAttribute.PrefixTemplateInfo.HtmlFieldPrefixを見てください。それらを使用することで、異なるアクションやモデルに対して異なるクライアントIDと名前を生成することができ、問題はおそらく解決されます。 HtmlFieldPrefixは、クライアント生成IDの接頭辞の追加に使用され、Bind.Prefixは、HtmlFieldPrefixで生成されたクライアントのクライアントフォーム値のバインドに使用されます。両方ともコントローラーアクションに設定されています。

+0

私はすでに私のために働いているので、私はロドリゴの答えを受け入れましたが、私はあなたが将来見なければならないものだと思います。私はモデルのプロパティの命名において「人間の介入」が好きではありません。 – ProfK

+0

あなたが必要とするのは、特定の場所のクライアントIDです。あなたが正しいです、モデルプロパティの名前を変更すると、単一の場所にカスタムプレフィックスを適用するより多くの場所で問題が発生する可能性があります。 – archil

関連する問題