TextBox вызывает кнопку обратной передачи в ASP.NET - PullRequest
5 голосов
/ 02 мая 2009

ASP.NET 2.0, тестирование в FF3 и IE7.

Когда я нажимаю кнопку ввода в текстовом поле, запускается соответствующее событие «OnClick» для первой кнопки ImageButton на странице. Если я удалю эту кнопку с изображением, она вызовет следующее событие ImageButton OnClick на странице.

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

Я нашел этот вопрос , у которого была похожая проблема, однако предлагаемый ответ на это решение не работает, поскольку у ImageButtons нет свойства «UseSubmitBehavior».

Я не понимаю, почему происходит это событие. Если я посмотрю на Request.Form, то увижу, что __EVENTTARGET пуст и фактически публикует все содержимое формы (все мои текстовые поля), но также включает пары ключ / значение imageButton.x и imageButton.y. *

Почему это? Я полагаю, что я мог бы обнаружить нажатия клавиш «ввод» из этих текстовых полей с помощью javascript, но в прошлом я видел, что это поведение сильно варьируется между браузерами. Есть предложения?

Ответы [ 8 ]

6 голосов
/ 02 июня 2009

вот более элегантное решение

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (event.keyCode!=13);" > </asp:TextBox>

прочитайте весь пост здесь

3 голосов
/ 11 сентября 2012

У меня та же проблема с моим проектом.

Эта проблема вызвана тем, что ASP.NET всегда будет считать, что первый элемент, который наследуется от интерфейса IButton (Button и ImageButton), является кнопкой по умолчанию со страницы.

Гипотетически, если вы используете LinkButton вместо Button или ImageButton, эта проблема решена.

Более подробную информацию можно найти здесь, на MSDN .

3 голосов
/ 02 мая 2009

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

1 голос
/ 10 января 2012

В последнее время я больше работаю над клиентом с помощью веб-сервисов и меньшим количеством обратных передач. Перемещая мои элементы управления за пределы элемента формы (или полностью исключая его), проблема исчезает. Он вставляется по умолчанию на страницы aspx, но до недавнего времени мне не приходило в голову, что он мне не нужен для большей части того, что я делаю.

1 голос
/ 02 мая 2009

Вы можете отключить нажатие клавиши Enter, чтобы пользователю приходилось нажимать на кнопки ImageButton. Просто вставьте этот блок JavaScript на свою страницу:

<script type="text/javascript">
function stopRKey(evt) { 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
}
document.onkeypress = stopRKey;
</script>
0 голосов
/ 13 октября 2010

Вот элегантное решение, которое я нашел, в случае, если у кого-то еще есть эта проблема (в случае, если все другие решения не работают для вас, так как они не работают для меня):

<asp:UpdatePanel runat="server">
<ContentTemplate>
    <asp:Panel runat="server" DefaultButton="doNothingButton">
        <ul id="shopping-list-ul">
        </ul>
        <asp:Button CssClass="invisible" runat="server" ID="doNothingButton" OnClientClick="return false;" />
    </asp:Panel>
</ContentTemplate>

Текстовое поле iself было внутри ul (сгенерировано javascript).
Нажатие клавиши ввода вызовет «doNothingButton», который вернет false на стороне клиента, не вызывая обратной передачи вообще!

0 голосов
/ 02 мая 2009

Полагаю, я мог бы обнаружить нажатия клавиш ввода в этих текстовых полях с помощью JavaScript

Это то, что я сделал, чтобы обойти это поведение, и оно прекрасно работает в IE7 и FF3. Это просто немного неестественно.

Вот общий пример:

    function TextBox1_KeyDown(sender, e)
    {
    var key;
        if(window.event)
            key = window.event.keyCode; //IE
        else
            key = e.which; //firefox
        if(key == 13 && $("#TextBox1").val() != "")
        {
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("TextBox1", "", true, "", "", false, true));
        }
        return (key != 13);
    }

Я использовал WebForm_DoPostBackWithOptions, потому что мне нужны валидаторы для запуска. В противном случае вы можете использовать __DoPostBack.

Вот "прототипы":

function __doPostBack(eventTarget, eventArgument)

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}

function WebForm_DoPostBackWithOptions(options)

Надеюсь, это поможет.

P.S .: Я использовал здесь JQuery, но $ get был бы таким же.

0 голосов
/ 02 мая 2009

Это поведение по умолчанию для нажатия кнопки ввода в нетекстовой области, чтобы отправить обратно форму. Чтобы остановить обратную передачу, вам придется обработать его в методе javascript.

Вам просто нужно проверить свойство window.event.keyCode, чтобы узнать, равно ли оно 13. Если оно, сбросьте его на 0.

function KeyPress()
  {
     if (window.event.keyCode == 13)
        {
           window.event.keyCode = 0;
        }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...