Member 9388700 Ответов: 1

Получить значение текстового поля после изменения с помощью javascript


Изменение значения текстового поля с помощью javascript при изменении выпадающего списка (без обратной передачи). Текстовое поле обновляется должным образом, но значение не приходит при отправке формы. Я предполагаю, что это происходит потому, что изменение javascript происходит только на стороне клиента? Как я могу получить это значение на стороне сервера?

Что я уже пробовал:

<pre>  <script type="text/javascript">
      function ddlChange() {
          var ddl = document.getElementById('<%=DDLg4corp.ClientID %>');
          var textBox = document.getElementById('<%= txtg4action.ClientID%>');

          textBox.value = ddl.options[ddl.selectedIndex].value;
      }
</script>

<asp:DropDownList runat="server" ID="DDLg4corp" onchange="ddlChange();">
  <asp:ListItem Value="1" Text="Option 1"></asp:ListItem>
  <asp:ListItem Value="2" Text="Option 2"></asp:ListItem>
  <asp:ListItem Value="3" Text="Option 3"></asp:ListItem>
  <asp:ListItem Value="4" Text="Option 4"></asp:ListItem>
</asp:DropDownList>

<asp:TextBox runat="server" id="txtg4action"></asp:TextBox> 


 Private Sub Button_Click(sender As Object, e As EventArgs) Handles btnSubmit1.Click,


With update
  .Connection = connection
  .CommandType = CommandType.Text
    If qrtSelect.SelectedValue = 1 Then
       .CommandText = "Update table set txtg4action=@txtg4action where users=@users"
       .Parameters.AddWithValue("@txtg4action", txtg4action.Text)

A_Griffin

На первый взгляд в этом нет ничего плохого. Вы, должно быть, делаете что-то еще где-то еще, что вызывает вашу проблему.

Member 9388700

Когда я получаю значение txtg4action в vb, оно возвращает старое значение, а не значение из DDL. Отредактировал и добавил еще немного кода.

A_Griffin

Ну, я не знаю, но код, который у вас есть, отправит обратно выбранное значение. Если только у вас на странице нет EnableViewState = False, может быть?

Member 9388700

Скриншот отладки: https://imgur.com/a/lozni

txtg4action.text должен быть "2". Он отображается как 2 на странице, но при отправке он все еще имеет старое значение. Не знаю, где еще искать или где еще я могу ошибиться. Не имеет EnableViewState = False

A_Griffin

А как насчет вашего события page_load? Вы переустанавливаете его значение там, не принимая во внимание обратную передачу?

Member 9388700

Используя скрипт, чтобы мне не пришлось делать обратную передачу с помощью DDL. Ничто не сбрасывается при загрузке страницы. Это просто кажется, что значение никогда не попадает в код позади. Я новичок в этом деле, так что прошу прощения, если я не очень хорошо понимаю.

A_Griffin

Ну, по - видимому, вы отправляете ответ каким - то образом-через кнопку или что-то еще-вот что такое отправка формы... ИДК, но код, который вы разместили, в порядке. Я могу опубликовать (как "решение") полную простую страницу, используя ее, чтобы доказать это, если вы хотите...

Member 9388700

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

Bryian Tan

Да, я тоже не вижу никаких проблем. Может быть, вы пропустили какую-то подробную информацию в посте. В любом случае, динамический запрос в вашем посте очень заразителен и открыт для потенциальной SQL-инъекции, старайтесь избегать этого, если это возможно, и используйте параметризованный запрос. Вот пример того, как реплицировать SQL-инъекцию на основе вашего текущего кода. Надеюсь, это вас убедит. SQL-инъекции и межсайтовые Скрипты[^]

A_Griffin

- он использовал параметризованный запрос ...?

Bryian Tan

мой плохой :) извините.

1 Ответов

Рейтинг:
6

A_Griffin

Ну, как и было обещано, вот простая страница с использованием вашего кода:

<%@ Page Language="VB" %>
<script runat="server"> 
    Private Sub btnGo_Click(ByVal Sender As Object, ByVal e As EventArgs)
      litX.Text = "You selected " & txtg4action.Text
    End Sub
</script>
<html>
<head>
   <title></title> 
   <script type="text/javascript">
      function ddlChange() {
         var ddl = document.getElementById('<%=DDList.ClientID %>');
            var textBox = document.getElementById('<%= txtg4action.ClientID%>');
            textBox.value = ddl.options[ddl.selectedIndex].value;
         }
   </script>
</head>
<body>
    <form id="Form1" runat="server"> 	   
      <p><asp:DropDownList runat="server" ID="DDList" onchange="ddlChange();">
        <asp:ListItem Value="1" Text="Option 1"></asp:ListItem>
        <asp:ListItem Value="2" Text="Option 2"></asp:ListItem>
        <asp:ListItem Value="3" Text="Option 3"></asp:ListItem>
        <asp:ListItem Value="4" Text="Option 4"></asp:ListItem>
      </asp:DropDownList></p>
      <p><asp:TextBox runat="server" id="txtg4action"></asp:TextBox></p>  
      <p><asp:Button runat="server" ID="btnGo" OnClick="btnGo_Click" Text="Submit" /></p>
	  <p><asp:Literal runat="server" id="litX" /></p>	
    </form>
</body>
</html>