Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> каустановить значение textboxa для eventvalidation 
:(
    Опции темы
draiv
Дата 14.11.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.5.2007

Репутация: нет
Всего: нет



Rак правильно установить допустимое значение текста в текстбоксе для eventvalidation.
Пишу при рендеринге:
ClientScript.RegisterForEventValidation(tbQuestion.UniqueID, "123");
все равно проходит валидацию с любым текстом или без оного (не только с "123").

PM MAIL   Вверх
Servena
Дата 14.11.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Напиши пример, ато не понятно что не так.
PM MAIL   Вверх
draiv
Дата 15.11.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.5.2007

Репутация: нет
Всего: нет



Пример следующий: (чисто для тестирования, как работает)
на форме есть текст бокс с id="tbQuestion"
и DropDownList с id="_recipeListID" (с тремя элементами изначально)
У обоих элементов AutoPostBack=false.

поставил атрибут у Page- EnableEventValidation="true"
Переопределил обработчик
Код

protected override void Render(HtmlTextWriter writer)
    {
      ClientScript.RegisterForEventValidation(tbQuestion.UniqueID, "123");
      ClientScript.RegisterForEventValidation(_recipeList.UniqueID, "4");
      base.Render(writer);
    }

protected void Page_Load(object sender, EventArgs e)
    {
      string script =
      @"      
         var d = document.getElementById('{_recipeListID}');
         d.options[3] = new Option('George\'s Recipe For Disaster', '4');
       ";

      ClientScript.RegisterStartupScript(GetType(),"AddToList",
        script.Replace("{_recipeListID}", _recipeList.ClientID),true);


      if (Page.IsPostBack)
      {
        Page.Validate();
        if (!Page.IsValid)
          return;
      }

    }


Вобщем и все
С DropDownList eventvalidation работает - выдает эксепшен если убрать 
ClientScript.RegisterForEventValidation(_recipeList.UniqueID, "4");
из обработчика Render и делать PostBack с выбранным 4-ым элементом
А с текстбоксом по любому PostBack проходит нормально с любым значением tbQuestion.Text.
Как сделать чтоб PostBack был разреше только с определенным значением tbQuestion.Text?

И еще попутно вопрос: не совсем понял - eventvalidation по любому защищает от эмулирования возврата формы или только в совокупности с ClientScript.RegisterForEventValidation и установкой определенных значений здесь для нужных обьектов.
Другими словами достаточно ли к примеру для защиты от автоматической регистрации установить атрибут
EnableEventValidation="true" у регистрационной формы или еще нужно производит какие то действия?
(Пробовал делать возврат формы JavaScriptom только с EnableEventValidation="true"-выдает эксепшен
Invalid Callback Or Postback Argument ...)
Подскажите плз в общих чертах, какие есть способы автоматической регистрации и как нужно защищаться от них в ASP.NET?

PM MAIL   Вверх
Servena
Дата 15.11.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Цитата

Как сделать чтоб PostBack был разрешен только с определенным значением tbQuestion.Text?

Можно использовать Кастом Валидатор, чтобы не грузить сервер:
аспх:
Код

<asp:LinkButton ID="l1" runat="server" PostBackUrl="~/Default.aspx">ПостБэк</asp:LinkButton>

    <input id="myTextBox" runat="server"/> 

    <asp:CustomValidator ID="CustomValidator1" ControlToValidate="myTextBox" EnableClientScript="true"
        ClientValidationFunction="ValidateTextBox" ValidateEmptyText="true"
        runat="server" ErrorMessage="Неправильное значение!!!">
    </asp:CustomValidator>

    <script type="text/javascript">
        function ValidateTextBox(source, arguments)
        {
            if(document.getElementById('<asp:Literal ID="myTextBoxID" runat="server"></asp:Literal>').value!="123")            
                arguments.IsValid=false;
            else
                arguments.IsValid=true;
        }
    </script>    


с-шарп:
Код

protected void Page_Load(object sender, EventArgs e)
    {
        Literal myTextBoxID = form1.FindControl("myTextBoxID") as Literal;
        myTextBoxID.Text = myTextBox.ClientID;
    }


Т.е., при всех значениях текстбокса, не равный "123" - постбэк не сработает. И вообще, с помощью скрипта на стороне клиента можно
задать любое правило, по которому считать введенное значение можно "правильным" или нет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.