Asp.net mvc 创建MVC帮助器方法以添加;标题「;指向控件以获取工具提示

Asp.net mvc 创建MVC帮助器方法以添加;标题「;指向控件以获取工具提示,asp.net-mvc,extension-methods,Asp.net Mvc,Extension Methods,我正在创建我的第一个MVC助手方法,但还不能完全理解它。我希望发出与标准“@Html.TextBoxFor”相同的代码,但带有属性“title”,其值取自model属性。这就是我目前所拥有的。你可以看到,我试图在最后使用标准的“TextBoxFor”,并向其添加我自己的属性,但这似乎不是实现的方法 public static MvcHtmlString TextBoxForWithTitle<TModel, TProperty>( this HtmlHelper<TMo

我正在创建我的第一个MVC助手方法,但还不能完全理解它。我希望发出与标准“@Html.TextBoxFor”相同的代码,但带有属性“title”,其值取自model属性。这就是我目前所拥有的。你可以看到,我试图在最后使用标准的“TextBoxFor”,并向其添加我自己的属性,但这似乎不是实现的方法

public static MvcHtmlString TextBoxForWithTitle<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
{
    var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    return htmlHelper.TextBoxFor(expression, new { @title = metaData.DisplayName });
}
public static MvcHtmlString TextBoxForWithTitle(
这个HtmlHelper HtmlHelper,
表达式(表达式)
{
var metaData=modelmetada.FromLambdaExpression(表达式,htmlHelper.ViewData);
返回htmlHelper.TextBoxFor(表达式,new{@title=metaData.DisplayName});
}
具体来说,我得到一个编译时错误:

'System.Web.Mvc.HtmlHelper<TModel>' does not contain a definition for 'TextBoxFor' and no extension method 'TextBoxFor' accepting a first argument of type 'System.Web.Mvc.HtmlHelper<TModel>' could be found (are you missing a using directive or an assembly reference?) D:\DevData\JWilliams\Code\Sandbox\URIntakeMVC2\URIntake\HtmlHelpers.cs  16  31  URIntake
“System.Web.Mvc.HtmlHelper”不包含“TextBoxFor”的定义,并且找不到扩展方法“TextBoxFor”接受类型为“System.Web.Mvc.HtmlHelper”的第一个参数(是否缺少using指令或程序集引用)?D:\DevData\JWilliams\code\Sandbox\URIntakeMVC2\URIntake\HtmlHelpers.cs 16 31 URIntake
HtmlHelper
类的一个实例,该类位于
System.Web.Mvc.Html
命名空间中

如果要使用扩展方法,则需要使用
using
指令显式导入其命名空间。因此,您缺少使用的

using System.Web.Mvc.Html;
不要忘记,您还在这里创建一个扩展方法(
TextBoxForWithTitle
),因此,当您想在视图中使用它时,您还需要
使用您自己的
TextBoxForWithTitle
方法命名空间:

@using URIntakeMVC2.URIntake
是位于
System.Web.Mvc.Html
命名空间中的
HtmlHelper
类的名称

如果要使用扩展方法,则需要使用
using
指令显式导入其命名空间。因此,您缺少使用

using System.Web.Mvc.Html;
不要忘记,您还在这里创建一个扩展方法(
TextBoxForWithTitle
),因此,当您想在视图中使用它时,您还需要
使用您自己的
TextBoxForWithTitle
方法命名空间:

@using URIntakeMVC2.URIntake

什么不起作用?您没有得到预期生成的HTML,或者您有错误吗?您不能使用EditorFor模板吗?@nemesv向问题添加了编译时错误消息。您是否在文件中使用System.Web.Mvc.HTML
引用了命名空间
?我现在有了!这让我更接近了。但是,现在,当我运行它时,它抱怨“没有扩展方法'TextBoxForWithTitle'”接受我试图在视图中传递给它的模型类型。我试着像以前一样称呼它。我需要改变我怎么称呼它吗@Html.TextBoxForWithTitle(x=>x.FormSubmitter.LastName)什么不起作用?您没有得到预期生成的HTML,或者您有错误吗?您不能使用EditorFor模板吗?@nemesv向问题添加了编译时错误消息。您是否在文件中使用System.Web.Mvc.HTML
引用了命名空间
?我现在有了!这让我更接近了。但是,现在,当我运行它时,它抱怨“没有扩展方法'TextBoxForWithTitle'”接受我试图在视图中传递给它的模型类型。我试着像以前一样称呼它。我需要改变我怎么称呼它吗@Html.TextBoxForWithTitle(x=>x.formsubmiter.LastName)