0

私はこのモジュール ( Extended Registration ) に取り組んでいます。このモジュールは、登録でカスタム ユーザー フィールドを表示する簡単な方法を提供します。AccountController フォーム ユーザーをオーバーライドし、Registration テンプレートに Editor Template を読み込みます。

アカウントコントローラー

        var shape = _orchardServices.New.Register();
        
        var user = _orchardServices.ContentManager.New("User");
        if (user != null) {
            shape.UserProfile= _contentManager.BuildEditor(user);
        }
        
        return new ShapeResult(this, shape);

Register.cshtml

    </div>
    @if (Model.OERegister != null) {
        <fieldset>
            @Display(Model.UserProfile)
        </fieldset>
    }
    <div>

ここの形状はエディター テンプレートです (EditorTemplate/Parts/template)

問題なく動作しますが、登録フォームからいくつかのフィールドを非表示にする必要があります。

私はここでちょっと迷っており、最もオーキッシュな方法でやりたいと思っています。

前もって感謝します。

4

1 に答える 1

0

私が理解している限り、ここでの質問は、フォームからいくつかのフィールドを一般的に非表示にする方法です。

フォームのコードの作成者がどのように設計したか、または開発者であるかどうかに応じて、複数の方法があります。

  • フォームのパーツを別々の形状にして、それらのファクトリをドライバから結合されたドライバの結果に返します。これは、パーツのエディターに形状を提供することによってフォームの一部を構築するドライバーが複数の形状を登録することを意味します (これは、たとえば BodyPartDriver.Display() が行うことと似ています: 3 つの個別の形状登録を返します)。これらは配置によって個別に制御できるようになったため、非表示にすることもできます。
  • フォームの作成方法を細かく制御できない場合でも、非表示にするフィールドを含むシェイプ テンプレートをオーバーライドできます。次に、オーバーライドで、フォームの外観を自由にカスタマイズできます。最初の解決策とは異なり、これはユーザーが非表示フィールドのデータをサーバーに投稿して保存することを自動的に妨げるものではないことに注意してください。

ところで、ContentManager.New() が null を返すことはないと思います。コンテンツ タイプが静的に定義されていない (つまり、移行または ContentDefinitionManager によって作成された) 場合でも、コンテンツ アイテムが返されます。

于 2012-08-14T09:22:32.933 に答える