使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";
}
}
我稍微重写了一下,以便更好地理解你的问题。它比你想要的要冗长,但它会使它更清晰。您所需要做的就是用一些元素构建一个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>