假设我们通过网页的网址输入了一个值。示例:www.test.com/page.aspx?& Key = Val。 Val可通过Request.Querystring(“Key”)检索。
是否可以将QueryString值分配给ASPX页面上定义的SqlDataSource的参数?
我所知道的选项:
这两个都使用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
答案 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;
}