通过下拉菜单提交选择并提交不在Classic ASP中工作

时间:2014-11-11 20:13:37

标签: c# sql-server asp-classic

我已在Classic ASP中完成编码,通过下拉列表和提交所选值来更新数据库来选择两个选项。它不起作用。我正在使用SQL查询" ../ sqlConnection.asp"位置,基本上包含更新年份和季节的数据库值的查询。我在SQL服务器上检查了数据库sql查询,SQL代码可以更新Year和Season。但只是通过经典ASP更新是行不通的。下面是我在经典ASP中的代码:

建议的解决方案有效:

我在表单标签中使用了action属性。我不得不在sql查询asp文件中执行此操作,在我的情况下../sqlConnection.asp:PCE_Update.Open(sqlqry)并且我必须包含另一个asp文件,其中定义了连接字符串,我错过了。

工作代码 - 编辑后的建议代码:

../ Example.asp:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Project Site</title>
<link rel="stylesheet" href="../css/reports.css" type="text/css" />
<style type="text/css">

</style>
</head>

<!--#include file="../sqlConnection.asp" -->
    <!--#include file="../sqlConnection1.asp" -->   
         <%
Dim YearID
Dim SeasonID
Dim myStudentID
          YearID = Request.Form("dYear")
          SeasonID = Request.Form("dSeason")

If Request.ServerVariables("REQUEST_METHOD")= "POST" Then
          myID = Request.QueryString("uniqueid")
          Updatedate myID, YearID, SeasonID
  End If
         %>

<body>
<div align = "center">
    <div>
    <form id="form1" method="post" action="Example.asp<%= request.querystring %>">

    <select class="dropYear" name="dYear">
    <option value="select">2014</option>
    <option value="2015">2015</option>
     </select>

    &nbsp &nbsp &nbsp;

    <select class="dropSeason" name="dSeason">
    <option value="select">FALL</option>
    <option value="Winter">WINTER</option>
       </select>

    <br /><br />

     <ul class="buttons">
     <input id="save" method="post" class="btTxt" type="submit" value="Submit"; />

     </ul> 
     </form>
    </div>
    <br/>
      </div>
</body>
</html>

这是我在&#34; ../ sqlConnection.asp&#34;中的SQL查询。从上面的代码调用。当我在SQL Server中运行时,下面的SQL查询工作正常,它会相应地更新特定员工ID的年份和季节。

../ sqlConnection.asp

Dim employeeid
Dim futureyear
Dim futureseason
Dim sqlquery
Dim PCE_Update
Dim sisconn
Sub Updatedate (employeeid,futureyear,futureseason)
sqlquery="update userdefinedind " & _
"set ayear = '" & futureyear & "' , aseason = '" & futureseason & "' " & _
"where employee_id = '" & employeeID & "' "

Response.Write(sqlquery)

    set PCE_Update = server.CreateObject("ADODB.Recordset")
        with PCE_Update
            .ActiveConnection = sisconn
            .CursorType = 1
            .CursorLocation = 2
            .Source = sqlqry
        end with    
        PCE_Update.Open(sqlqry)
end sub

我有什么遗漏的吗?请建议。我在经典ASP方面做得不多,以为我可能会在这里找不到简单的步骤。

2 个答案:

答案 0 :(得分:1)

由于您未使用action,因此页面已发布回当前页面,但没有querystring

但是您依赖查询字符串进行更新操作 - 因为您使用的是myID = Request.QueryString("uniqueid"),然后在更新的myID条件中使用where。这意味着,在回发之后,myID具有空值,意味着没有更新操作。

要使其有效,请将操作属性更新为action="index.asp?<%= request.querystring %>"

index.asp替换为所需的值。

了解详情 - Post to current page, keeping querystring values in tact

编辑1

我告诉我要将action添加到<form ..标记。喜欢以下。

<form id="form1" method="post" action="example.asp?<%= request.querystring %>">

我相信,<input..标记没有任何action属性。

编辑2

您需要检查,如果有post事件,那么只调用update方法,所以要做到这一点,您需要将它们包含在if检查中,如下所示。< / p>

<%
If Request.ServerVariables("REQUEST_METHOD")= "POST" Then
          YearID = Request.Form("dYear")
          SeasonID = Request.Form("dSeason")

          myID = Request.QueryString("uniqueid")
          Updatedate myID, YearID, SeasonID
End If
%>

答案 1 :(得分:0)

您发布的代码中没有操作属性。您是否尝试过添加显式操作(将数据发布到的页面)?

您的提交按钮也在结束表单标记之外。

修改

您在HTML表单中声明了变量,而不是正在进行处理的ASP页面。将它们移动到您的处理页面:

 <%
  YearID = Request.Form("dYear")
  SeasonID = Request.Form("dSeason")

  myID = Request.QueryString("uniqueid")
  Updatedate myID, YearID, SeasonID
 %>

然后调用您的更新方法:

Updatedate(myID, yearID, seasonID)

您需要在实际执行处理的页面中执行此操作,否则变量值将丢失。

我认为您还需要将Action属性从提交按钮移动到表单标记。