2

ID コンポーネントと Value コンポーネントの両方をバインドして、次のように動作できるように、HTML 拡張メソッドを改良しようとしています。

@Html.AutoCompleteFor(model => model.Customer.ID, model => model.Customer.Name, "/Customer/Autocomplete")

私は現在、次のようにしています:

@Html.AutoCompleteFor(model => model.CustomerID, model => model.CustomerID_display, "/Customer/Autocomplete")

モデルを拡張して CustomerID_display を含める必要がある場合、これは少し扱いに​​くく、非常に具体的な後処理が必要です。

表示値 (エンティティのテキスト名) にバインドする必要がある理由は、ユーザーが新しい項目を入力すると、それが検出され、自動生成される可能性があるためです。

もちろん、上記の予想される方法は機能しません。しかし、あなたは私が何をしようとしているのかを効果的に知っているべきです. 上記の私の期待した方法が機能した場合、私の AutoCompleteFor の実装は非常に単純になります (最近では誰もが些細な言葉を使用しています!)。おそらく、ラムダがもう少し便利になると期待しています。

@Html.AutoCompleteFor(model => new AutoCompleteBinding { ID = model.Customer.ID, Name = model => model.Customer.Name }, "/Customer/Autocomplete")

ありがとう!

4

1 に答える 1

1

HTML の "...For" 拡張では、通常、1 つの Expression パラメータしかありません。

 public static MvcHtmlString AutoCompleteFor<TModel, TValue>(
           this HtmlHelper<TModel> htmlHelper,
           Expression<Func<TModel, TValue>> expression,
           object postingTextBoxHtmlAttributes,
            string extraArguments,
            string sourceURL
           )
        {
              //...
        }

これを拡張して、別の式を含めます。追加:

Expression<Func<TModel, TValue>> expression

作る:

public static MvcHtmlString AutoCompleteFor<TModel, TValue>(
           this HtmlHelper<TModel> htmlHelper,
           Expression<Func<TModel, TValue>> expression,
           Expression<Func<TModel, TValue>> expression2,
           object postingTextBoxHtmlAttributes,
            string extraArguments,
            string sourceURL
           )
        {
            //...
        }

通常の式と同じように、式 2 を使用できるようになりました。(もちろん、直感的な名前を付ける必要があります)。

使用方法は、質問に記載されているとおりです。

@Html.AutoCompleteFor(model => model.Customer.ID, model => model.Customer.Name, "/Customer/Autocomplete")
于 2012-12-03T01:52:07.690 に答える