1

我正在创建我的第一个 MVC 辅助方法,但不能完全理解。我想发出与标准“@Html.TextBoxFor”相同的代码,但属性“title”及其值取自模型属性。这就是我到目前为止所拥有的。你可以看到我试图在最后使用标准的“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 });
}

具体来说,我得到一个编译时错误:

'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
4

1 回答 1

7

TextBoxFor是位于命名空间中的类的扩展方法HtmlHelper<TModel>System.Web.Mvc.Html

如果要使用扩展方法,则需要使用using指令显式导入其命名空间。所以你错过了using

using System.Web.Mvc.Html;

并且不要忘记您也在此处创建了一个扩展方法 ( TextBoxForWithTitle),因此当您想在视图中使用它时,您还需要using自己的TextBoxForWithTitle方法命名空间:

@using URIntakeMVC2.URIntake
于 2013-02-13T20:54:45.623 回答