提问人:meraki_1 提问时间:5/18/2023 更新时间:5/20/2023 访问量:43
搜索功能在 .aspx 文件中不起作用
Search function not working in .aspx file
问:
我有一个名为 Narudzbe.aspx 的网页,它显示订单的 GridView。我正在尝试实现一种搜索功能,用户可以在其中输入特定的订单号并检索相应的订单。但是,搜索功能似乎没有按预期工作。
下面是相关代码:
Narudzbe.aspx:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Narudzbe.aspx.vb" Inherits="Mišković_OMIS_projekt.Narudzbe" %>
<!DOCTYPE html>
<!-- Rest of the HTML code -->
<form id="form2" runat="server">
<!-- Rest of the form code -->
<div class="search">
<input type="text" id="txtSearch" placeholder="Pretraži po broju narudžbe"/>
<input type="button" id="btnSearch" value="Pretraži" onclick="btnSearch_Click"/>
<!-- Rest of the code -->
</div>
</form>
纳鲁兹贝.aspx.vb:
Imports System.Data.SqlClient
Partial Class Narudzbe
Inherits System.Web.UI.Page
Protected WithEvents btnSearch As Button
Protected WithEvents txtSearch As TextBox
Protected Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
Dim searchValue As String = txtSearch.Text.Trim()
If Not String.IsNullOrEmpty(searchValue) Then
SqlDataSource1.SelectCommand = "SELECT Narudžba.[ID narudžbe], Kupac.Ime, Narudžba.[Datum primitka], Narudžba.[Datum isporuke], Status.[Naziv statusa] FROM Narudžba INNER JOIN Kupac ON Narudžba.[ID kupac] = Kupac.[ID kupac] INNER JOIN Status ON Narudžba.[ID statusa] = Status.[ID statusa] WHERE [ID narudžbe] = @SearchValue"
SqlDataSource1.SelectParameters.Clear()
SqlDataSource1.SelectParameters.Add("SearchValue", searchValue)
Else
SqlDataSource1.SelectCommand = "PodaciZaTablicuNarudzbe"
SqlDataSource1.SelectParameters.Clear()
End If
GridView1.DataBind()
End Sub
End Class
我面临的问题是,当我在搜索输入字段中输入特定订单号并单击“Pretraži”按钮时,GridView 不会更新以显示过滤后的结果。似乎未触发 btnSearch_Click 事件处理程序或未正确执行 SQL 查询。
我已经仔细检查了代码,并确保按钮和文本框具有正确的 ID。可能导致此问题的原因是什么?关于如何修复搜索功能的任何建议?
注意:我将 Visual Studio 和 SQL Server 用于此 Web 应用程序。
提前感谢您的帮助!
答:
有几件事:
当我创建 asp.net Web 表单页面时,
我明白了:
<form id="form1" runat="server">
<div>
</div>
</form>
因此,默认名称为 form1。自过去 20 年以来的书籍、示例代码以及当您创建新页面时,表单标记默认为 form1。你有什么特别的原因要改变它吗?(这样做可能是有原因的,但我想不出一个好的理由。但是,由于您要更改该表单标记 ID,因此您需要有充分的理由这样做)。
接下来:
当我从工具箱中拖放一个按钮时,我得到这个:
<asp:Button ID="Button1" runat="server" Text="Button" />
再:
有没有一个巨大的、伟大的、梦幻般的惊天动地的想法,为什么你不在这里使用 asp.net 按钮?
因此,您可以插入 HTML 按钮,但要小心,因为 onclick=“要运行的客户端 java 脚本代码”
换言之,对于 HTML 按钮,您需要:
a) 选择控件的一个很好的理由 - 不仅仅是随机将泥浆扔到墙上,并希望在翅膀上祈祷按钮起作用。
b) 您希望按钮单击以运行 JavaScript(客户端浏览器端代码)运行 onclick=“my java script function here”。
所以,完全不清楚为什么要在这里拖放 HTML 按钮?
因此,对于 HTML 按钮,您可以拥有以下内容:
<input id="Button2" type="button" value="button"
onclick="myclientcode()"
/>
<script>
function myclientcode() {
alert("This is client side click")
}
</script>
但是,如果您想要代码隐藏和服务器端事件,则将 + 拖放到 asp.net 按钮中,然后简单地双击该按钮以创建代码隐藏事件。
例如:
你也可以在查看标记时这样做,比如说:
我想,如果你喜欢世界贫困,第三种方法是用手输入标记,但话又说回来,我不希望你因为不得不用手输入这些东西而饿死。您可以(并且肯定会)在拖放该按钮或控件后经常调整生成的标记,并且经常会说将 button1 更改为一个好听的名字,例如 cmdEdit 等。
但是,就我的第一点而言?否,您不想更改 form1 的默认表单 ID 标记。(一个很好的理由是,SUPER RARE必须在代码中使用form1“id”,并且由于99%的时间您永远不会在代码中使用表单ID标签,因此您不需要更改表单ID标签。
但是,对于控制?为什么你当然会经常在代码后面使用这些控件和按钮,因此你经常并且应该根据自己的喜好更改这些控件的 ID。
所以请记住;
for HTML button, onclick="run client side java script code"
for asp.net button, onclick="run server side code behind"
编辑:工作搜索示例
所以,现在我们处理了所有这些问题,让我们尝试一个搜索功能。我们将搜索酒店名称,然后在网格视图中显示结果。
因此,我们的简单标记:
<asp:Label ID="Label1" runat="server" Text="Enter Hotel" Font-Size="Large"></asp:Label>
<asp:TextBox ID="txtHotel" runat="server" Font-Size="Large" Style="margin-left:20px"></asp:TextBox>
<asp:Button ID="cmdSearch" runat="server" Text="Search" Style="margin-left:20px" CssClass="btn" />
<br />
<br />
<asp:GridView ID="GridView1" runat="server" CssClass="table table-striped">
</asp:GridView>
而我们的代码隐藏 - 注意我们不需要那些带有事件的代码 - 同样不清楚你为什么要添加/使用它们。
因此,背后的代码是这样的:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
' optional - load grid with all data
LoadGrid()
End If
End Sub
Sub LoadGrid()
Dim strSQL As String =
"SELECT * FROM vHotels WHERE HotelName like @Hotel + '%'
ORDER BY FirstName"
Dim cmdSQL As New SqlCommand(strSQL)
cmdSQL.Parameters.Add("@Hotel", SqlDbType.NVarChar).Value = txtHotel.Text
GridView1.DataSource = MyRstP(cmdSQL)
GridView1.DataBind
End Sub
Public Function MyRstP(cmdSQL As SqlCommand) As DataTable
Dim rstData As New DataTable
Using conn As New SqlConnection(My.Settings.TEST4)
Using cmdSQL
cmdSQL.Connection = conn
conn.Open()
rstData.Load(cmdSQL.ExecuteReader)
End Using
End Using
Return rstData
End Function
结果是这样的:
评论
asp:Button
runat="server"
<form>