MVC3 HtmlHelper возвращает ' - PullRequest
       7

MVC3 HtmlHelper возвращает '

2 голосов
/ 21 октября 2011

Как я могу заставить помощника MVC3 Html возвращать строку, не закодированную в формате html?

Следующий метод:

    public static string SelectedIfEqual(this int id, int otherId)
    {

        if (id == otherId)
            return new MvcHtmlString(" selected='selected'").ToString();
        return null;  

    }

возвращает selected='selected' вместо selected='selected'.

Я даже пытался:

    return MvcHtmlString.Create(" selected='selected'").ToHtmlString();

, но он возвращает то же самое ...: - (

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

Возвращает HtmlString или передает результат на Html.Raw() вызов.
Измените свою функцию на:

public static MvcHtmlString SelectedIfEqual(this int id, int otherId)
{
  if (id == otherId)
    return new MvcHtmlString(" selected='selected'");
  return null;  
}

Если вы не хотите изменять свой код, добавьте расширение к HtmlHelper:

public static class MyHelper
{
  // This doesn't work
  //public static Foo Grid(this HtmlHelper helper, string id)
  //{
  //  return new Foo(id).ToString();
  //}

  // This should work as intended
  public static MvcHtmlString Foo(this HtmlHelper helper, Foo theFoo)
  {
    return theFoo.ToHtmlString();
  }
}

В классе Foo метод ToHtmlString() будет выглядеть как

public MvcHtmlString ToHtmlString() 
{
  return new MvcHtmlString(ToString());
}

И тогда в представлении вы можете использовать

@Html.Foo(theFoo)

Если вы не хотите использовать Extension Helper, вы можете также использовать:

@Html.Raw(Model.idField.SelectIfEqual(otherId))

Надеюсь, это поможет.

0 голосов
/ 10 июля 2012

Или вы можете создать вспомогательный класс, который не кодирует добавленные атрибуты HTML.

public class HtmlAttributeNoEncoding : System.Web.Util.HttpEncoder
{
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
    {
        output.Write(value);
    }
}
...