Управляющие атрибуты рендеринга Закодированы в dot net 4 - как отключить кодировку? - PullRequest
3 голосов
/ 26 мая 2010

У меня проблема в asp.net 4.

Когда я добавляю атрибут к элементам управления, тогда рендеринг его кодируется.

Например, когда явведите этот код

txtQuestion.Attributes["onfocus"] = 
    "if(this.value == this.title)
{
   this.value = '';
   this.style.backgroundColor='#FEFDE0';
   this.style.color='#000000';
}";

Я получаю визуализацию

onfocus="if(this.value == this.title){this.value = 
'';this.style.backgroundColor='#FEFDE0';
this.style.color='#000000';}"

И каждый ' хэш изменяется на & # 39;

Есть ли способ отключить это новое будущее только на некоторых элементах управления ?или простой способ сделать пользовательский рендер?

My Fail пытается

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

txtQuestion.RenderingCompatibility = new Version("3.5");

Я также нахожу точку, в которой отображаются эти атрибуты и находится на

public virtual void RenderBeginTag (HtmlTextWriterTag tagKey) function,

там у каждого атрибута есть флаг, если он хочет быть закодированным, но я не знаю, как кто-то может установить его или нет.

One Work Around

В форуме asp net в том же вопросе есть решение, которое изменяет глобальный EncodeType - это не то решение, которое я ищу - и человек, который дает решение, говорит, что это не отличный обходной путь ,с потенциальными проблемами безопасности или другими проблемами рендеринга.

Спасибо всем в продвинутом.

Кервин

До сих пор Кервин обнаружил, что Microsoft предлагает вместо этого использовать эту команду.

txtQuestion.Attributes["onfocus"] = 
    "if(this.value == this.title){this.value = '';this.style.backgroundColor='#FEFDE0';this.style.color='#000000';}";

Используйте это.

    Page.ClientScript.RegisterExpandoAttribute(txtQuestion.ClientID, "onfocus", 
 "if(this.value == this.title){this.value = '';this.style.backgroundColor='#FEFDE0';this.style.color='#000000';}");

И что MS рендерит, это в конце страницы, скрипт, который добавляет фокус на этот элемент управления с помощью JavaScript .Мы можем сделать это даже сами с помощью jQuery и, возможно, быть более совместимыми.

Это решение, , но все же я хотел бы знать, есть ли способ просто избежать кодировки атрибутов и позволитья делаю то, что я хочу, мой путь - не путь MS.

Ответы [ 4 ]

2 голосов
/ 02 июня 2010

Вы пытались использовать эту новую функцию ASP.NET 4 сделать пользовательский кодировщик?

1 голос
/ 05 октября 2011

Я столкнулся с этой проблемой с MvcHtmlHelper для автозаполнения.

Я закончил тем, что использовал | ~ | вместо ', а затем заменив это на' после того, как Html.TextBox отобразил строку, но до того, как мы ее вернули.

Это действительно раздражающая функция "безопасности".

1 голос
/ 06 июня 2010

От MSDN Свойство WebControl.Attributes Документация ...

Примечание

Нельзя добавить клиентский сценарий к экземпляру WebControl, используя коллекцию Attributes. Чтобы добавить клиентский скрипт, используйте свойство ClientScript в элементе управления Page.

Проблема в том, что Атрибуты ожидают данные, если они устанавливаются в коде позади.

Решение состоит в том, чтобы отправить обратно клиентский скрипт с вашими функциями-обработчиками на стороне клиента, после чего вы можете установить атрибут с именем ваших функций.

Если ваш javascript статичен, то все еще проще, поскольку вы можете отправить их в теге script задолго до регистрации элементов управления.

0 голосов
/ 26 марта 2013

Если вы действительно хотите предотвратить кодирование параметров, вам нужно создать свой собственный настраиваемый элемент управления и переопределить метод AddAttributesToRender. Очевидно, что это не очень гибко, потому что вам нужно создать отдельный пользовательский элемент управления для каждого типа используемого элемента управления.

К счастью, это очень просто и требует всего несколько строк кода, поэтому может сработать. Вот полный код, необходимый для настраиваемой кнопки:

public class MyCustomButton : Button
{
    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        base.AddAttributesToRender(writer);
        writer.AddAttribute("onclick", "myJavascriptFunction('a string');", false); // passing false to the AddAttribute method tells it not to encode this attribute.
    }
}

Очевидно, это только добавляет жестко закодированный клик к концу атрибутов и может помешать, если онклик уже был предоставлен. Если вы хотите пойти дальше, вы можете перебрать фактическую коллекцию атрибутов и добавить их полностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...