2011-10-06 37 views
0

我想讓整個GridView行成爲一個鏈接,我想我知道了但我遇到了一個問題。正如你可以從下面看到的,我所有的查詢字符串數據都來自數據庫,現在我想添加一個不是來自數據庫的查詢字符串,我怎麼能做到這一點?在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"; 
    } 
} 
+1

它從哪裏來? –

+1

只是澄清......這聽起來像你回答了標題中提出的問題,你實際上是問如何混淆查詢字符串呢?如果是這樣,您可能需要更改標題。 – nycdan

+0

@詹姆斯,這是我想要在鏈接中進行硬編碼的東西。它不是來自數據庫,例如Id和League來自表格字段,Type,Rounds和Groups正從前一頁的QueryString中拉出。 – jorame

回答

-1

它看起來像你的代碼應該工作。當您嘗試加載頁面時,是否收到任何腳本錯誤?
此外,你測試這與什麼瀏覽器?

我會嘗試使onClick小寫字母「c」開頭。

除此之外,我會考慮修改你的代碼,因爲看起來好像你很容易受到跨站點腳本攻擊,因爲你在將它放入屬性之前沒有清理QueryString。

攻擊者可以通過修改頁面的查詢字符串說利用此:

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

-1這給出了很多一般性建議,但根本不回答問題。 –

0

我改寫了這一點,試圖瞭解你的問題更好。它比你想要的更冗長,但它會使它更清晰。你需要做的就是從許多元素中構建一個查詢字符串,其中一些元素來自你的數據庫,另一些來自你的上一頁,其他的可能會被硬編碼。這很簡單。只需在查詢字符串中爲每個變量賦值,然後構建字符串。

例如,假設您正在從數據庫中使用這樣的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;"); 

它不只要將它們轉換爲字符串以構建查詢字符串,就可以知道如何獲取每個值。還有什麼我失蹤?

+0

當然,您可以看到鏈接中的一些字段來自數據庫中的表格,但我還需要向並非來自數據庫的鏈接添加一些數據。類型,輪次和組是前一頁中攜帶的值。這個鏈接看起來像這樣:?Types = L&Rounds = 0&Groups = 6現在我想把這個添加到RowDataBound中,我希望它看起來像這樣:?ID = 36&Team1 = USA&Team2 = England&League = None&Type = 2&Types = L&Rounds = 0&Groups = 6我希望這使得sence – jorame

+0

我不知道你是否錯過了我或我。您可以根據您喜歡的任何方式獲取任意數量的字符串值來構建查詢字符串。我調整了我的答案以更好地說明問題,但如果有更多需要的東西,請嘗試闡明它。 – nycdan