C# ASP.NET-从页面加载时的QueryString值设置SqlDataSource参数值的最佳实践?
假设我们有一个值通过页面的URL传入。示例:www.test.com/page.aspx?&Key=Val。可以通过Request.Querystring(“Key”)检索Val 为ASPX页面上定义的SqlDataSource参数分配QueryString值是否有公认的最佳实践? 我知道的选项:C# ASP.NET-从页面加载时的QueryString值设置SqlDataSource参数值的最佳实践?,c#,.net,asp.net,vb.net,C#,.net,Asp.net,Vb.net,假设我们有一个值通过页面的URL传入。示例:www.test.com/page.aspx?&Key=Val。可以通过Request.Querystring(“Key”)检索Val 为ASPX页面上定义的SqlDataSource参数分配QueryString值是否有公认的最佳实践? 我知道的选项: 不要在ASPX文件中包含参数。直接通过codebehind添加它们——并在添加时分配Param.DefaultValue 在页面加载中设置Param.DefaultValue(代码块2) 这两种方法都
代码块1
<SelectParameters>
<asp:Parameter Name="StoreID" Type="String" DefaultValue="-1" />
</SelectParameters>
以前我用对象数据源做过,但我没有向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;
}
公共类QueryStringKey
{
公共静态隐式运算符QueryStringKey(字符串键)
{
返回新的QueryStringKey{Key=Key};
}
公共字符串密钥{get;set;}
公共价值
{
得到
{
if(HasValue==false)
{
抛出新的ArgumentNullException(键);
}
TypeConverter converter=TypeDescriptor.GetConverter(typeof(T));
尝试
{
return(T)converter.ConvertFromString(_valueString);
}
抓住
{
return(T)Activator.CreateInstance();
}
}
}
公共布尔值
{
得到
{
return!String.IsNullOrEmpty(\u valueString);
}
}
私有字符串_valueString
{
得到
{
返回HttpContext.Current.Request.QueryString[Key];
}
}
}
公共类查询字符串键
{
公共静态QueryStringKey StoreId=“StoreId”;
}
受保护的无效ObjectDataSource1\u选择(对象发送方,ObjectDataSourceSelectingEventArgs e)
{
if(QueryStringKeys.StoredId.HasValue)
e、 InputParameters[“StoreId”]=QueryStringKeys.StoreId.Value;
}
最好直接使用数据源事件,而不是PageLoad事件来处理
要在Select中设置查询字符串,请将其添加到数据源:
<SelectParameters>
<asp:QueryStringParameter Name="StoreID" QueryStringField="StoreID" Type="Int64" />
</SelectParameters>
编辑:修改为使用变量名。我知道其他问题涵盖了实现此任务的各种方法。这个问题更接近于ASP.NET团队打算如何执行此任务。ThanksI会猜到SqlDataDource Selectparameters会允许这样做,但它们不允许。无法将字符串转换为参数。现在,我只是调整了DefaultValue属性,但感觉不对。我现在检查了它。参数值可以在选择EventFire时更改,但我认为它可以直接访问SqlCommand;e、 Command.Parameters[“@StoreId”].Value=QueryStringKeys.StoreId.Value;不幸的是,我没有参数的Value属性,只有defaultValue。幸运的是,Jamon告诉我QueryStringParameter似乎是专门为此设计的。哇,我不知道这是可能的。谢谢没问题,我们经常遇到这个问题。如果你需要帮助,请告诉我。
<SelectParameters>
<asp:QueryStringParameter Name="StoreID" QueryStringField="StoreID" Type="Int64" />
</SelectParameters>
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