我正在尝试获取asp:SessionParameter
的{{1}},以便在会话中使用对象的属性
而不是像SelectParameters
属性为Session["CustomerID"]
的内容((客户)Session["Customer"]
我不知道这样做的语法,如果你能提供帮助,我真的很感激
谢谢
我的代码:
Session["Customer"]).CustomerID)
我使用的类与任何其他类(但可序列化)类似
<asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:DBConnectionString %>" xmlns:asp="#unknown"> SelectCommand="SELECT * FROM getStoreCustomers (@customerID,@week,@day)"
ProviderName="System.Data.SqlClient">
<selectparameters>
<asp:sessionparameter name="customerID" sessionfield="Customer" /> ?????? (what is the syntax to pass the property here?)
<asp:controlparameter controlid="ddWeek" defaultvalue="-1" name="week" propertyname="SelectedValue" /> <asp:controlparameter controlid="ddDay" defaultvalue="-1" name="day" propertyname="SelectedValue" /> </selectparameters>
答案 0 :(得分:2)
如何从彼得那里找到。
“改为使用常规参数,并在SqlDataSource的Selectingevent中设置值
<asp:Parameter Name="customerID" Type="String" />
在事件处理程序中:
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
if (Session["Customer"] != null)
{
Customer c = (Customer)Session["Customer"];
e.Command.Parameters[0].Value = c.CustomerID.ToString();
}
}
答案 1 :(得分:1)
我理解你在说什么,但我认为参数不够智能,无法获得会话中存储的对象的属性。我认为它必须是原始类型,否则使用an并通过代码显式设置DefaultValue属性:
ds.SelectParameters["ParamName"].DefaultValue = ((Customer)Session["Customer"]).CustomerID;
答案 2 :(得分:0)
您需要处理sqldatasource的OnSelecting事件并在那里添加参数。
答案 3 :(得分:0)
我写了下面的课,让我为我工作:
/// <summary>
/// Allows to access field-values of a object in Session.
/// </summary>
public class SessionObjectParameter : Parameter
{
public string SessionField { get; set; }
public string PropertyName { get; set; }
protected override object Evaluate(HttpContext context, System.Web.UI.Control control)
{
if (string.IsNullOrEmpty(SessionField))
throw new Exception("SessionField must be definied");
if (string.IsNullOrEmpty(PropertyName))
throw new Exception("PropertyName must be definied");
PropertyInfo pi = context.Session[SessionField].GetType().GetProperty(this.PropertyName);
if (pi == null)
throw new Exception(string.Format("PropertyName '{0}' is not definied in the object at Session['{1}'].", this.PropertyName, this.SessionField));
return pi.GetValue(context.Session[SessionField]);
}
}
有了这个,我可以将它用作SqlDataSource上的一个简单参数:
<asp:SqlDataSource ID="dsTest" runat="server" ConnectionString='<%$ ConnectionStrings:con %>' SelectCommand="SELECT * FROM Test WHERE ([Field] = @ParValue)">
<SelectParameters>
<costum:SessionObjectParameter Name="ParValue" SessionField="MySessionObject" PropertyName="Value" />
</asp:SqlDataSource>