我正在尝试使用流畅的语法创建强类型的HTML帮助器。我在网上看到了一些例子,但他们都使用TagBuilder
来构建html。相反,我想在CurrencyTextBox
类中存储对原始HTML帮助器对象的引用,以便以后访问(因为它包含大量有用的信息,我也可以使用其TextBoxFor
方法创建一个文本框)。
以下代码无效。
扩展方法
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类
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();
}
}
但是在上面的代码中,ToString()
方法内部出现错误
严重级代码描述项目文件行抑制状态 错误CS1061&#39; HtmlHelper&#39;不包含的定义 &#39; TextBoxFor&#39;没有扩展方法&#39; TextBoxFor&#39;接受第一个 类型&#39; HtmlHelper&#39;的论点可以找到(你错过了吗? using指令或程序集引用?)
也可以在costructor中传递htmlhelper和expression吗?
答案 0 :(得分:0)
将您的Tostring()
ToHtmlString()
方法中的override
更改为ToString()
:
示例:
public override string ToString()
{
var textBox = _helper.TextBoxFor(_expression, ModelMetadata.FromLambdaExpression(_expression, _helper.ViewData).EditFormatString, _attr);
return textBox.ToHtmlString();
}
并更改AddClass
方法,如下所示:
public CurrencyTextBox<TModel, TValue> AddClass(string className)
{
_attr.Add("class",className);
return this;
}
希望对你有帮助。
答案 1 :(得分:0)
首先,您需要使用正确的语法。
public CurrencyTextBox<TModel, TValue> AddClass(string class)
类是保留关键字。您需要将其重命名为 className
return textBox.Tostring();
C#区分大小写。所以你需要使用返回textBox.ToString();
答案 2 :(得分:0)
这是我自己的愚蠢错误
INSTALL_REFERRER
方法位于TextBoxFor
命名空间中。所以在添加System.Web.Mvc.Html;
后修复它。