使用自定义HTML帮助器

时间:2019-01-23 09:26:19

标签: c# asp.net-mvc

尝试使用我在第一个答案中在此处找到的html帮助器:

enter link description here

在此处设置控制器部分:

 public static class HtmlHelpers
{
    public static MvcHtmlString DisplayWithBreaksFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        var model = html.Encode(metadata.Model).Replace("\r\n", "<br />\r\n");

        if (String.IsNullOrEmpty(model))
            return MvcHtmlString.Empty;

        return MvcHtmlString.Create(model);
    }
}

在视图中,我使用:

@using HtmlHelpers

@Html.DisplayWithBreaksFor(m => m.MultiLineField)

但是我都遇到了错误

第一个:

  

“找不到类型或名称空间名称'HtmlHelpers'(您是否缺少using指令或程序集引用?)”

第二次:

  

“'System.Web.Mvc.HtmlHelper>'不包含'DisplayWithBreaksFor'的定义,也没有扩展方法'DisplayWithBreaksFor'接受类型为”“的第一个参数。

     

“可以找到'System.Web.Mvc.HtmlHelper>(您是否缺少using指令或程序集引用?)”

2 个答案:

答案 0 :(得分:1)

您添加了错误的名称空间。我认为您不应该将方法放在控制器中。只需创建一个新类。因此,您可以更好地重用代码。这是一个样本。你可以参考。希望对您有帮助,我的朋友:))

1)我创建了一个新类,其名称空间为MvcExam.UtilitiesClass

namespace MvcExam.UtilitiesClass
{
    public static class HtmlHelpers
    {
        public static MvcHtmlString DisplayWithBreaksFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
        {
            var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
            var model = html.Encode(metadata.Model).Replace("\r\n", "<br />\r\n");

            if (String.IsNullOrEmpty(model))
                return MvcHtmlString.Empty;

            return MvcHtmlString.Create(model);
        }
    }
}

2)在视图中

@using MvcExam.UtilitiesClass

@Html.DisplayWithBreaksFor(m => m.Name)

答案 1 :(得分:0)

您必须使用完整的名称空间:

@using YourProjectName.YourAssemblyName.FolderNameWhereYourClassLives;