2011-04-20 34 views
0

我有一個datagridview由一個數據表填充,我希望能夠在用戶單擊該單元格時將單元格的值傳遞到下一頁。該單元格的值然後傳遞給一個sql存儲過程。有人可以提供如何做到這一點的方法嗎?將參數從超鏈接字段框發送到下一頁

回答

1

您可以在點擊時填入Session變量或將QueryString參數添加到超鏈接 - 但請記住,這些中的任何一個都可能被最終用戶(QueryString參數比會話變量更容易)更改,所以你必須擔心執行存儲過程的頁面上的SQL注入。

編輯 - 假設你爲列提供的代碼,你只需要值添加到您的HyperLinkField字段的NavigateUrl,喜歡的東西:

<asp:HyperLinkField DataTextField="OnCallStart" HeaderText='OncallStart" NavigateUrl="\website1\Default2.aspx?value=<%# HttpUtility.UrlEncode(Eval("DataSourceField")) %>' SortExpression="OnCallStart" /> 

和你的新頁面上處理值(Default2.aspx)使用Response.QueryString("value")

+0

伊恩,我有這樣的代碼現在的和我的鏈接未顯示不再爲OncallStart字段和default2.aspx頁面上的數據表格未被填充。有什麼建議麼? – 2011-04-26 15:55:01

+0

是否有任何異常被拋出?如果將DataNavigateUrlFormatString更改爲「{0}」或「\ website1 \ Default2.aspx」,會發生什麼情況 - 您是否還有問題?另外,考慮使用代字號將直接鏈接映射到您想要的頁面,如'〜/ website1/Default2.aspx'。 – 2011-04-26 17:30:44

+0

伊恩,沒有異常被拋出,當我試圖保存我的連接字符串時,我發現它是「自定義」,即使當我通過嚮導時,我正確設置連接字符串。我已經從Visual Studio中將web.config文件複製到根目錄,但似乎無法解決問題。當我回頭看看我的數據表時,同樣的「自定義」連接字符串就在那裏。任何想法爲什麼? – 2011-04-26 17:52:06

0

三種最流行的,我所看到的是:

  • 查詢字符串
  • 發帖值到下一個頁面
  • 會話狀態

你可以閱讀所有三個this article.正如@Ian指出的那樣,人們很容易修改查詢字符串參數,所以要謹慎使用它們。如果你正在使用參數化查詢(你應該是這樣),那麼SQL注入將不會是一個問題。

+0

Abe,我讀過那個頁面,不明白頁面之間傳遞的值是如何傳遞的。我假設會話狀態是要走的路。 – 2011-04-21 14:42:12

1

在這種情況下我會使用查詢字符串,這樣的:

<asp:GridView... > 
<Columns> 
<asp:TemplateField> 
<ItemTemplate> 
    <a href='nextPage.aspx?value=<%# HttpUtility.UrlEncode(DataBinder.Eval(Container.DataItem, "ColumnName")) %>' ><%# Eval("TextField") %></a> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 

</asp:GridView> 

而在下一頁:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) ... 

    passedValue = Request.QueryString("value").ToString() 

    DoSomethingWith(value) 

End Sub 
+0

onof這是問題字段的代碼:在哪裏插入您的代碼? – 2011-04-21 14:46:42

+0

你必須把它變成一個TemplateField,像這樣:<%# Eval("OnCallStart") %> onof 2011-04-21 21:19:24

相關問題