使GridView中的一整行成为链接

本文关键字:链接 GridView | 更新日期: 2023-09-27 18:10:41

我试图使整个GridView行链接,我想我得到了它,但我遇到了一个问题。正如你从下面看到的,我所有的查询字符串数据都来自数据库,现在我想添加一个查询字符串,不是来自数据库,我怎么能做到这一点??

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {           
        string Types = Request.QueryString["Type"].ToString();
        string Rounds = Request.QueryString["Rounds"].ToString();
        string Groups = Request.QueryString["Groups"].ToString();
        string Id = DataBinder.Eval(e.Row.DataItem, "Id").ToString();
        string League = DataBinder.Eval(e.Row.DataItem, "League").ToString();
        string Team1 = DataBinder.Eval(e.Row.DataItem, "Team1").ToString();
        string Team2 = DataBinder.Eval(e.Row.DataItem, "Team2").ToString();
        string Type = DataBinder.Eval(e.Row.DataItem, "TType").ToString();
        string Location = ResolveUrl("Update_Match.aspx" + "?Id=" + Id + "&Team1=" + Team1 + "&Team2=" + Team2 + "&League=" + League + "&Type=" + Type + "&Types=" + Types + "&Rounds=" + Rounds + "&Groups=" + Groups);
        e.Row.Attributes["onClick"] = string.Format("javascript:window.location='{0}';", Location);
        e.Row.Style["cursor"] = "pointer";
    }
}

使GridView中的一整行成为链接

我稍微重写了一下,以便更好地理解你的问题。它比你想要的要冗长,但它会使它更清晰。您所需要做的就是用一些元素构建一个querystring,其中一些元素来自数据库,一些元素来自之前的页面,其他元素可能是硬编码的。这很简单。只需首先为querystring中的每个变量赋值,然后构建字符串。

例如,假设您正在使用ID从数据库中获取球队名称,如下所示:
String Team1 = db.Teams.Where(w => w.TeamID = TeamID).First().TeamName;

并且您正在将类型设置为硬编码值:

Int type = 0;

当你完成了你的变量,只要把它们放在一起,像这样:

string QS = "Id=" + ID.ToString();
QS = QS + "&Team1=" + Team1;
QS = QS + "&Team2=" + Team2;
QS = QS + "&League=" + League;
QS = QS + "&Type=" + Type.ToString();
QS = QS + "&Types=" + Types;
QS = QS + "&Rounds=" + Rounds.ToString();
QS = QS + "&Groups=" & Groups.ToString();
e.Row.Cells[0].Visible = false;e.Row.Attributes.Add("onclick", "location='newpage.aspx?" + sQueryString;
e.Row.Attributes.Add("style", "cursor:pointer;");

如何获取每个值并不重要,只要它们被转换成字符串来构建querystring即可。我还错过了什么吗?

看起来你的代码应该可以工作。当您尝试加载页面时,会出现任何脚本错误吗?
另外,你是用什么浏览器测试的?

我会尝试让"c"在onClick小写开始。

除此之外,我会考虑修改一下你的代码,因为它看起来好像你很容易受到跨站点脚本攻击,因为你没有在将QueryString放入属性之前清理它。

攻击者可以通过修改页面的queryString来利用这一点:

http://www.yourpage.com/index.aspx?otherQueryString=3&Groups=<script>window.alert("Hello XSS!!");</script>