私は、流暢な構文で強く型付けされたHTMLヘルパーを作成しようとしています。私は例をオンラインで見たが、彼らはすべてTagBuilder
を使ってhtmlを構築している。代わりに、後でアクセスするために、CurrencyTextBox
クラスの元のHTMLヘルパーオブジェクトへの参照を保存したい(大量の有用な情報が含まれており、テキストボックスを作成するのにメソッドを使用することもできます)。流暢な構文で強く型付けされたHtmlHelperを作成するには?
以下のコードは機能しません。
拡張メソッド
public static class CurrencyTextBoxHelper
{
public static CurrencyTextBox<TModel, TValue> CurrencyFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
return new CurrencyTextBox<TModel, TValue>(helper, expression);
}
}
CurrentTextBoxクラスIエラー
重大度コード説明メニュープロジェクトを取得
ToString()
方法内側しかし上記のコードでpublic class CurrencyTextBox<TModel, TValue>: IHtmlString { private RouteValueDictionary _attr = null; private HtmlHelper<TModel> _helper; private Expression<Func<TModel, TValue>> _expression; public CurrencyTextBox(HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression) { _helper = helper; _expression = expression; _attr = new RouteValueDictionary(); } public CurrencyTextBox<TModel, TValue> AddClass(string class) { _attr.Add("class",class); return this; } public CurrencyTextBox<TModel, TValue> Enabled(bool enabled) { if (!enabled) { _attr.Add("disabled", "disabled"); } return this; } public string ToHtmlString() { return ToString(); } public override string ToString() { // i get error at line below var textBox = _helper.TextBoxFor(_expression, ModelMetadata.FromLambdaExpression(_expression, _helper.ViewData).EditFormatString, _attr); return textBox.Tostring(); } }
、 ectファイルの行の抑制状態 エラーCS1061 'HtmlHelper'に 'TextBoxFor'の定義が含まれておらず、 'TextBoxFor'の拡張メソッドがありません。 'HtmlHelper'型の 引数を最初に受け入れることができました( usingディレクティブまたはアセンブリ参照?)
また、htmlhelperとexpressionをcostructorに渡すのもいいですか?あなたのoverride
ToString()
Methodeの中ToHtmlString()
へ