gpt4 book ai didi

c# - 使用 ASP.NET 服务器传输在单独的网页上显示搜索结果

转载 作者:行者123 更新时间:2023-11-29 00:29:33 27 4
gpt4 key购买 nike

我是 ASP.NET 的新手,这个问题已经困扰我两个星期了。请帮忙!

我正在尝试构建一个网站,该网站具有对使用 MySql 构建的本地数据库进行搜索的功能。我希望搜索结果显示在我网站的单独页面上。我使用的是服务器传输方式,我的代码如下:

对于输入搜索文本的页面,我有一个文本框和一个用于单击的按钮,.cs 文件是:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.MySqlClient;


public partial class Default_Page : System.Web.UI.Page
{
public string Default_Page_TextBox1
{
get { return Default_Page_TextBox1.Text; }
set { this.Default_Page_TextBox1.Text=value; }
}


private void Default_Page_Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("Default_Search_Result.aspx");
}
}

对于显示搜索结果的页面,.cs文件是:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data.MySqlClient;

public partial class Default_Search_Result : System.Web.UI.Page
{
MySqlConnection connection = null;
MySqlCommand command = null;
MySqlDataReader reader = null;

protected void Page_Load(object sender, EventArgs e)
{
string myConString = "SERVER=localhost;" +
"DATABASE=mydb;" +
"UID=**;" +
"PASSWORD=**;";

connection = new MySqlConnection(myConString);

Default_Page Dp;

Dp = (Default_Page)Context.Handler;

command = connection.CreateCommand();
command.CommandText = "select BkName from bkinfo where bkname = '" + Default_Page_TextBox1.Text + "'";
connection.Open();
reader = command.ExecuteReader();

if (reader.Read())
{
Label1.Text = reader.GetValue(0).ToString();
}
else
{
Label1.Text = "Not Found";
}
connection.Close();
}
}

搜索无效。 Visual Studio 捕获 3 个错误:

  1. 在输入文本进行搜索的页面 (Default_Page) 上,

    返回 Default_Page_TextBox1.Text;

显示:

'string' does not contain a definition or 'Text' and no extension method 'Text' accepting a first argument of type 'string' could be found.

  1. 在页面显示搜索结果(Default_Search_Result)时,

    Default_Page Dp;

显示:

the type or namespace name 'Default_Page' could not be found

  1. 还在页面上显示搜索结果(Default_Search_Result),

    command.CommandText = "select BkName from bkinfo where bkname = '"+ Default_Page_TextBox1.Text + "'";

显示:

the name 'Default_Page_TextBox1" does not exist in the current context.

谁能帮我找出问题所在?

最佳答案

这段代码有很多错误,这让我觉得您可能想退后一步,从一些更简单的 C# 教程开始。但是,也许我可以为您指出正确的方向,说明为什么会出现每个错误。让我们开始:

   public string Default_Page_TextBox1
{
get { return Default_Page_TextBox1.Text; }
set { this.Default_Page_TextBox1.Text=value; }
}

您已经实现了一个引用自身的属性。换句话说,Default_Page_TextBox1是一个字符串,其 getter 返回其自身的一个属性。 编译器 错误发生为 string没有名为 Text 的属性,但是这是您最少的问题。你最终会调用 Default_Page_TextBox1递归地获取,并最终导致堆栈溢出。也许您有一个名为 TextBox1 的 Web 控件,在这种情况下,您可以直接引用它(因为 Visual Studio 设计器将在您的部分类中实现它。

接下来是错误 *找不到类型或 namespace 名称“Default_Page”*。显然,您已经声明了一个名为 Default_Page 的类.我假设它在同一个程序集中,所以这不是问题。但是,由于此类存在编译器错误(见上文),我猜测未找到该类型,因为该类从未被正确编译。修复上述错误,此错误应该会消失。

最后是:

command.CommandText = "select BkName from bkinfo where bkname = '" + Default_Page_TextBox1.Text + "'";

此声明存在一些问题。一、类Default_Search_Result没有名为 Default_Page_TextBox1 的属性.你似乎认为在你拥有 Server.Transfer() 之后你可以访问你在其他类(class)的属性(property)远离它。这是错误的。

更好的解决方案是实现您的 <form>简单地POSTDefault_Search_Result直接,并使用 Request.QueryString 读取搜索查询相反。

此外,请记住使用字符串连接构建 SQL 选择语句不是一个好主意。如果您的文本包含撇号,它将结束字符串常量。这可以被利用来运行任意 SQL 语句,这是一种称为 SQL 注入(inject)的安全漏洞。如果您只是在学习,您的代码就很好,但永远不要在任何重要的代码上这样做。继续阅读如何参数化 SQL 查询以解决此问题。

关于c# - 使用 ASP.NET 服务器传输在单独的网页上显示搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com