c# - ASP.NET - 在页面加载时从 QueryString 值设置 SqlDataSource 参数值的最佳实践?

标签 c# .net asp.net vb.net

假设我们有一个通过页面 URL 传入的值。示例:www.test.com/page.aspx?&Key=Val。 Val 可通过 Request.Querystring("Key") 检索。

对于将 QueryString 值分配给在 ASPX 页面上定义的 SqlDataSource 的参数,是否存在可接受的最佳实践?

我知道的选项:

  1. 不要在 ASPX 文件中包含参数。通过代码隐藏直接添加它们——并在添加时分配 Param.DefaultValue。
  2. 在页面加载中设置 Param.DefaultValue(代码块 2)

这两个都使用 DefaultValue,一个显然不打算以这种方式使用的属性。 ASP.NET 霸主是否有推荐的方法来完成这个常见任务?

代码块 1

    <SelectParameters>
        <asp:Parameter Name="StoreID" Type="String" DefaultValue="-1" />
    </SelectParameters>

代码块 2:

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    SD1.SelectParameters("StoreID").DefaultValue = Request.QueryString("StoreID")
 End Sub

最佳答案

这最好直接使用 DataSource 事件处理,而不是 PageLoad 事件。

要在 Select 中设置 QueryString,请将其添加到您的数据源:

    <SelectParameters>
        <asp:QueryStringParameter Name="StoreID" QueryStringField="StoreID" Type="Int64" />
    </SelectParameters>

这会告诉 DataSource Select 在 QueryString 中查找“?StoreID=x”,并将 StoreID 设置为您提到的 URL 中的“x”。

要为 StoreID 设置默认值,请像这样挂接到数据源选择事件:

Protected Sub SD1DataSource_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles SD1DataSource.Selecting
    If e.Command.Parameters("@StoreID").Value Is Nothing Then
        e.Command.Parameters("@StoreID").Value = 155
    End If
End Sub

编辑:修改为使用您的变量名。

关于c# - ASP.NET - 在页面加载时从 QueryString 值设置 SqlDataSource 参数值的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301246/

相关文章:

c# - 在构造过程中,将其传递给 RunWorkerAsync

c# - ASP.NET 空标签文本

c# - if else if or 切换大小写

asp.net - Signal-R,带或不带 Web API?

asp.net - 数据绑定(bind) : 'System.Data.DataRowView' does not contain a property with the name 'Driver_Name'

c# - ASP.NET 页面跟踪结果

c# - 使用 IP :PORT/PATH 的 TCPClient()

c# - 如何在 app.config 文件中转义 [?

c# - ASP.NET Core CRUD 工具 : command not found but actually installed

c# - `PrintQueue.AddJob` 没有完成