2011-04-20 59 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

相关问题