2012-06-11 3 views
0

В моем представлении есть одно текстовое поле, которое захватывает сканирование от пользователей. Затем сканирование будет передано без каких-либо дополнительных действий пользователя для другого действия, которое затем будет использовать отсканированные данные для завершения транзакции. До сих пор текстовое поле заполнялось сканированием и сразу же перенаправлялось, но без содержимого текстового поля. Это то, что у меня есть;Javascript и keyup для передачи данных контроллеру

Вид:

<input id="thisText" class="largetext" name="txtScanLabel" onkeyup="myKeyUp" /> 

И:

<script type="text/javascript"> 
    var tResults = "Test"; 

     $(function() { 
      $('input.largetext').focus(); 
     }); 

     $(function() { 
      $("#thisText").keyup(myKeyUp); 
     }); 

     function myKeyUp(eventInstance) { 
      var myURL = '@Url.Action("ScanResults", "Home")'; 
      window.location.href = myURL + '?tResults' + encodeURIComponent(tResults); 
     } 

    </script> 

Контроллер:

public ActionResult ScanResults(string tResults) 
    { 

     var test = tResults;      

     return RedirectToAction("Success"); 

    } 
+1

почему. несколько обработчиков 'ready' – Rafay

+0

является tResults в действии контроллера null –

+0

@ 3nigma, это не имеет значения. jQuery достаточно умен, чтобы объединить все их в один обработчик выполняется, когда DOM готов. –

ответ

2

Вы ненавязчиво подписались на обработчик .keyup события с JQuery, и все же вы использовали атрибут onkeyup в вашем DOM. Вам не нужно делать эти две вещи. Использовать jQuery достаточно. Так начните путем очистки разметки:

<input id="thisText" class="largetext" name="txtScanLabel" /> 

Также вы жёстко значение tResults к Test в вашем JavaScript. Вместо того, чтобы использовать это жёстко прописанное значение из глобальных переменных (что вы могли бы избавиться от), вы должны прочитать значение из текстового поля:

function myKeyUp(eventInstance) { 
    var myURL = '@Url.Action("ScanResults", "Home")'; 
    var value = $(this).val(); 
    window.location.href = myURL + '?tResults=' + encodeURIComponent(value); 
} 

Обратите внимание, что с помощью window.location.href немедленно перенаправлять на действие контроллера ScanResults когда пользователь что-то в поле ввода. Вероятно, вы хотите использовать AJAX:

function myKeyUp(eventInstance) { 
    var myURL = '@Url.Action("ScanResults", "Home")'; 
    $.ajax({ 
     url: myURL, 
     type: 'POST', 
     data: { tResults: $(this).val() }, 
     success: function(result) { 
      // do something with the result returned by the controller action 
     } 
    }); 
} 
+0

Я начал с AJAX, но он тоже не работал. Я удалил твердое тестовое значение, но я все еще не вижу никаких данных, возвращаемых в действие контроллера ScanResults. – SandSnark

+0

Вы заметили отсутствующий знак '=' после параметра строки запроса 'tResults', который забыли:'?? TResults = ''. –

+0

Ahh, орехи. Это именно то, что было. Извините, не трать время! – SandSnark

0

вы не включили [HttpPost] Атрибут в управлении Действие.

+0

Он перенаправляется на него ('window.location.href'). Переадресация означает GET-глагол, а не POST. Если он украсит действие контроллера атрибутом '[HttpPost]', он никогда не сможет перенаправить его. –

+0

, но он хочет передать данные на этот URL. Возможно ли это с GET? –

+0

Конечно -> используя параметры строки запроса. –

0

Вы должны это возможно, как ваш «тест не будет работать, как сейчас:

 window.location.href = myURL + '?tResults' + encodeURIComponent(tResults); 

изменение

 tResults = $('#thisText').val(); 
     window.location.href = myURL + '?tResults=' + encodeURIComponent(tResults); 

НЕ забывать, что важный знак равенства там

Смежные вопросы