单击listview上的项目,在第二页上填充detainfo?

时间:2012-03-07 18:01:38

标签: asp.net

我有一个带搜索引擎的页面,它将存储过程调用到数据库。该页面包含一个列表视图,该列表视图根据用户在搜索框中输入的内容进行填充。我能够将listview中的每个项目作为链接,将用户引导到第二个页面(目前不包含任何内容)。我希望能够点击某个项目并转到第二页,其中包含有关该项目的详细信息。

例如,假设我在一列中有一个音乐家数据库,在第二列中有他们的传记。用户在第一页上搜索音乐家,并且列表视图仅填充音乐家的名字。用户点击音乐家的名字然后被引导到包含他们的bio(来自数据库)的第二页。我的问题是,当用户点击列表视图中的项目时,我如何使用详细信息填充第二页? click事件是否必须将参数传递回数据库并知道如何获取此特定摘要以填充第二页?参数查询会是正确的选择吗?

我确信这是一个非常简单的事情,但我对asp.net很新,并且不知道如何解决这个问题。任何有关如何采用方法的想法或方法都将受到高度赞赏。我没有太多代码,因为我在设计视图和html中一直在做大部分。

非常感谢你的时间,

2 个答案:

答案 0 :(得分:1)

执行此操作的一种非常直接的方法是在列表中的每个项目中为链接添加参数。所以不要这样:

<a href="detailspage.aspx">View Details</a>

你会有这样的事情:

<a href="detailspage.aspx?id=123">View Details</a>

当然,每行id都不同。填充方式取决于您如何填充列表视图。

然后你会有一个detailspage.aspx(或任何你称之为)的id参数(请查看Request.QueryString["id"]中的Page_Load值表单,或将其作为MVC中的方法参数)并使用该值从数据库中获取记录并显示详细信息。

在这种情况下非常值得注意的一件事是需要在将输入发送到数据库之前验证该输入。您没有指定如何访问数据库,所以我只能猜测。但是,无论您的数据访问方法如何,您希望对详细信息页面上的id值执行的第一个事项是确保它是用于选择数据的有效值。< / p>

例如,如果数据库中的标识符是整数,您将要尝试将该值解析为实际的整数变量(如果它是默认的字符串,它将来自Request.QueryString) ,如果失败,则向页面返回错误。或者,如果它是GUID,则相同的过程。基本上,您希望尽可能地确保在连接到数据库之前数据库的安全性。

有关SQL注入漏洞的更多详细信息here

答案 1 :(得分:0)

所以我终于明白了!万一有人被卡住或试图做同样的事情,我的目标是......这就是我所做的:

这是我的第一页:

'NavigateUrl ='&lt;%#“Testpage2.aspx?id =”+ DataBinder.Eval(Container.DataItem,“ID”)%&gt;' ID =“Link2”/&gt; (结果是我的数据列,ID是与之关联的ID)

注意:我在我的ItemTemplate和我的AlternateTemplate中添加了这个(不知道为什么,但如果我没有,它只会替代:S)

第二页代码背后:

protected void Page_Load(object sender,EventArgs e)     {

    SqlConnection SQLconn = new SqlConnection("Connectionstring");
    try
    {

        SQLconn.Open();

        SqlCommand command = new SqlCommand("SELECT Column1 FROM Table WHERE D='" + Request.QueryString["id"]
             + "'", SQLconn);

        SqlDataReader reader = command.ExecuteReader();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                TextBox1.Text = reader["Column1"].ToString();
            }
        }
    }
    catch (SqlException ex)
    {
        Response.Write(ex.Message.ToString());
    }

    finally
    {
        SQLconn.Close();
        SqlConnection.ClearPool(SQLconn);
    }
}

谢谢!