Отключить EventValidation для одного элемента управления, это возможно? - PullRequest
12 голосов
/ 11 января 2010

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

Я знаю, что могу пройти проверку с помощью ClientScriptManager.RegisterForEventValidation. Но я бы очень хотел знать. Можно ли удалить проверку события для одного элемента управления? Есть ли способ обойти это?

Я изменяю DropDownList со стороны клиента после его рендеринга.

Ответы [ 4 ]

31 голосов
/ 21 декабря 2011

Атрибут SupportsEventValidation не наследуется для подклассов, поэтому, если вы создаете подкласс DropDownList, не применяете этот атрибут к подклассу и используете подкласс на своей странице, у вас будет элемент управления, который не вызывает событие проверка, даже если на странице включена проверка события.

public Class DynamicDropDownList : DropDownList
{
}

http://msdn.microsoft.com/en-us/library/system.web.ui.supportseventvalidationattribute%28v=VS.110%29.aspx

4 голосов
/ 14 мая 2014

Еще один способ справиться с этим:

Установите свойство EnableViewState="False" для конкретного элемента.

Причина: если вы используете JavaScript для изменения этого значения вне контроля ASP.NET, то ViewState просто мешает вам в этот момент. Прекратите использовать его для этого элемента управления.

3 голосов
/ 12 января 2010

Краткий ответ на ваш вопрос: нет, нет способа сделать это. Вы должны отключить EventValidation для всей страницы.

Существуют различные обходные пути ... Если вы действительно не хотите отключать EventValidation, сохраните выбранное значение в скрытом поле и восстановите состояние DropDownList (или, возможно, просто очистите выбор?).

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

3 голосов
/ 11 января 2010

Мне было проще заменить элемент управления HTML-эквивалентом с runat = "server", затем вы можете получить значение по старинке с помощью Request.Forms ["id"]. Проверка не будет выполнена, поэтому будьте осторожны при хранении или обработке данных.

Другой вариант - переопределить визуализацию на странице и использовать Page.ClientScript.RegisterForEventValidation со всеми возможными ответами (не приятно). как то так

    protected override void Render(HtmlTextWriter writer)
    {
        this.Page.ClientScript.RegisterForEventValidation(ddlRisk.ID, "a");
        this.Page.ClientScript.RegisterForEventValidation(ddlRisk.ID, "b");
        this.Page.ClientScript.RegisterForEventValidation(ddlRisk.ID, "c");
        base.Render(writer);
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...