Почему я не могу найти метод RadioButtonFor? - PullRequest
7 голосов
/ 18 августа 2011

Вот мой статический класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Linq.Expressions;
using System.Text;
using System.Web;

namespace Foo.WebUI.Infrastructure
{
    public static class HtmlHelpers
    {
        public static MvcHtmlString Image(this HtmlHelper helper, string src, string altText)
        {
            var builder = new TagBuilder("img");
            builder.MergeAttribute("src", src);
            builder.MergeAttribute("alt", altText);

            return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
        }

        public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
        {
            var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            var names = Enum.GetNames(metaData.ModelType);
            var sb = new StringBuilder();
            foreach (var name in names)
            {
                var id = string.Format(
                    "{0}_{1}_{2}",
                    htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
                    metaData.PropertyName,
                    name
                );

 //---------------------------------------ERROR HERE!-----------------------------
                var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
                sb.AppendFormat(
                    "<label for=\"{0}\">{1}</label> {2}",
                    id,
                    HttpUtility.HtmlEncode(name),
                    radio
                );
            }
            return MvcHtmlString.Create(sb.ToString());
        }

    }
}

Когда я компилирую это, я получаю эту ошибку:

'System.Web.Mvc.HtmlHelper' не содержит определения для RadioButtonFor и метод расширения не RadioButtonFor, принимающий Первый аргумент типа «System.Web.Mvc.HtmlHelper» может быть найдено (вам не хватает директивы using или ссылки на сборку?

Я получил этот вспомогательный метод из этого ответа:

передать перечисление в html.radiobutton для MVC3

Ответы [ 4 ]

15 голосов
/ 18 августа 2011

Метод расширения InputExtensions.RadioButtonFor находится в пространстве имен System.Web.Mvc.Html, поэтому вам нужно добавить предложение using для этого пространства имен

0 голосов
/ 17 сентября 2013

Чтобы сделать это всегда доступным, вы можете добавить ссылку на ваше пространство имен HtmlHelper в вашем файле Views\Web.config, как показано ниже, чтобы он всегда был виден из ваших представлений, без необходимости каждый раз включать его.

 <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="My.HtmlHelper.Namespace" /> <!-- Added here -->
      </namespaces>
    </pages>
  </system.web.webPages.razor>
0 голосов
/ 18 августа 2011

Метод RadioButtonForEnum не является частью класса HtmlHelper, это расширение.Вы должны включить пространство имен, где класс расширения:

using System.Web.Mvc.Html;

Вы можете увидеть пространство имен для использования на странице документации для метода .

0 голосов
/ 18 августа 2011

добавьте using System.Web.Mvc.Html; в начало вашего кода

...