#asp.net-mvc-3 #html-helper #html-entities
#asp.net-mvc-3 #html-помощник #html-сущности
Вопрос:
Как я могу заставить MVC3 Html helper возвращать строку, которая не закодирована в html?
Следующий метод:
public static string SelectedIfEqual(this int id, int otherId)
{
if (id == otherId)
return new MvcHtmlString(" selected='selected'").ToString();
return null;
}
возвращает selected=amp;#39;selectedamp;#39;
вместо selected='selected'
.
Я даже пытался:
return MvcHtmlString.Create(" selected='selected'").ToHtmlString();
но он возвращает то же самое … 🙁
Ответ №1:
Возвращает 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)
Если вы не хотите использовать помощник по расширению, вы также можете использовать:
@Html.Raw(Model.idField.SelectIfEqual(otherId))
Надеюсь, это поможет.
Комментарии:
1. Вы имеете в виду: вернуть новую строку HtmlString(«selected=’selected'»). toString();
2. Отредактировано с некоторыми примерами из реальной жизни. Надеюсь, это поможет.
Ответ №2:
Или вы можете создать вспомогательный класс, который не кодирует добавленные атрибуты HTML..
public class HtmlAttributeNoEncoding : System.Web.Util.HttpEncoder
{
protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
{
output.Write(value);
}
}