Как остановить помощника HTML от кодирования атрибута значения элемента HTML?

У меня есть этот элемент ввода, который отлично работает с шаблонами подчеркивания.

<input id="color" name="color" value="<%= color %>" />

Я хочу использовать Html.Helper метод для создания элемента вместо.

Я изначально попробовал только основной помощник

@Html.TextBox("color", "<%= color %>")

Но это дает мне

<input id="color" name="color" type="text" value="&lt;%= color %>" />

Я попытался обернуть атрибут значения Html.Raw но это дает тот же результат, и обертывание всего помощника приводит к тому же самому.

Весь блок завернут в <script type="text/template"> тег.

Почему это преобразование < в &lt; и как мне это остановить?

Это работает, но немного грязно

@MvcHtmlString.Create(Html.TextBox("color", "<%= color %>").ToString().Replace("&lt;", "<"))

1 ответ

Если вы пытаетесь использовать цвет, предоставленный из кода, не лучше ли поместить свойство Color в модель, связанную с представлением? Тогда вы можете использовать:

public class MyModel
{
    public string ColorField {get;set;} //not sure whether you wanted string color or hex color here.  CHange it as necessary
    //also add whatever else you need the UI to bind to
}

В вашем контроллере при настройке модели вы должны указать значение по умолчанию:

public ViewResult MyViewName()
{
     MyModel model = new MyModel { ColorField = "blue"; // or hex color / etc.}
     //add other initialization here
     return View(model);
}

тогда на ваш взгляд

@model MyModel

@Html.TextBoxFor(model=>model.ColorField, "color")

Мне кажется, что вы смешиваете традиционный синтаксис ASP.NET с синтаксисом Razor, но я не использовал синтаксис ASP.NET с MVC, поэтому я могу ошибаться, я хотел отойти от старого.

Независимо от того, как я описал выше, я всегда помещаю значения по умолчанию в поля формы, и это прекрасно работает.

Другие вопросы по тегам