ASP.NET - 从QueryString值@ Page Load设置SqlDataSource参数值的最佳实践?

时间:2010-02-20 05:59:02

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

假设我们通过网页的网址输入了一个值。示例:www.test.com/page.aspx?& Key = Val。 Val可通过Request.Querystring(“Key”)检索。

是否可以将QueryString值分配给ASPX页面上定义的SqlDataSource的参数?

我所知道的选项:

  1. 不要在ASPX文件中包含参数。通过代码隐藏直接添加它们 - 并在添加时分配Param.DefaultValue。
  2. 在页面加载中设置Param.DefaultValue(代码块2)
  3. 这两个都使用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
    

2 个答案:

答案 0 :(得分:4)

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

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

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

这告诉DataSource Select在QueryString中查找“?StoreID = x”,并如上所述将StoreID设置为“x”。

要为StoreID设置默认值,请勾选DataSource选择事件,如下所示:

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

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

答案 1 :(得分:1)

我之前做过对象数据源,并没有为Page_Load或ASPx添加默认值。

public class QueryStringKey<T>
{
    public static implicit operator QueryStringKey<T>(string key)
    {
        return new QueryStringKey<T> { Key = key };
    }

    public string Key { get; set; }

    public T Value
    {
        get
        {
            if (HasValue == false)
            {
                throw new ArgumentNullException(Key);
            }

            TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
            try
            {
                return (T)converter.ConvertFromString(_valueString);
            }
            catch
            {
                return (T)Activator.CreateInstance<T>();
            }
        }
    }

    public bool HasValue
    {
        get
        {
            return !String.IsNullOrEmpty(_valueString);
        }
    }

    private string _valueString
    {
        get
        {
            return HttpContext.Current.Request.QueryString[Key];
        }
    }
}

public class QueryStringKeys
{
    public static QueryStringKey<int> StoreId = "StoreId";
}

    protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        if (QueryStringKeys.StoredId.HasValue)
            e.InputParameters["StoreId"] = QueryStringKeys.StoreId.Value;
    }