SHe*_*ema 2 c# sql asp.net linq-to-entities global-variables
我意识到这可能是一个简单的问题,但我是ASP.net(C#)的新手,并且遇到了一个问题,我在这个方法中传递了一个'side'对象,该对象是从一个SQL数据库通过LINQ-to-获得的实体声明.我尝试将另一个全局变量设置为Ride.identity属性的值(这是一个long),但在下一个方法中,当我尝试使用此值时,新值不会保持不变.有什么想法吗?如果有一些我错过的后期重新初始化这个变量,有没有办法保存它?谢谢.
private void displayRide(Ride ride, int carNum)
{
if (ride != null)
{
ride.AssignedCar = carNum;
ride.Status = "EnRoute";
id_ridePendingConfirm = ride.identity; //<----THE PROBLEM IS HERE!
myEntities.SaveChanges();
RideToAssignDV.DataSource = new List<Ride> {ride};
RideToAssignDV.DataBind();
}
else
{
//TODO: Redirect to error.aspx
RideToAssignDV.DataSource = null;
RideToAssignDV.DataBind();
}
}
Run Code Online (Sandbox Code Playgroud)
将值存储在ViewState中.例如:
ViewState["RideId"] = ride.identity;
Run Code Online (Sandbox Code Playgroud)
当您在代码中的行中使用它时,您需要这样做:
id_ridePendingConfirm = (long)ViewState["RideId"];
Run Code Online (Sandbox Code Playgroud)
不过要小心.由于ViewState [key]返回一个对象,因此您需要确保它不是空引用,否则您将收到InvalidCastException.
我通常会告诉我的同事创建受保护属性的经验较少,该属性将存储此值并将其持久保存在ViewState中,如下所示:
protected const string RideIdViewStateKey = "CurrentRideId";
protected long CurrentRideId
{
get
{
object o = ViewState[RideIdViewStateKey];
return (null == o)? -1 : (long)o;
}
set
{
ViewState[RideIdViewStateKey] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,执行以下操作:
// Assignment before postback so that you can preserve the state:
CurrentRideId = ride.identity;
// After postback in the method you have above:
id_ridePendingConfirm = CurrentRideId;
Run Code Online (Sandbox Code Playgroud)
现在,因为我不知道你的代码在没有可用的Ride身份时应该做什么,所以我决定-1,但这取决于你的代码实际需要什么.
我不建议您的方案使用会话状态,因为这显然需要在页面回发之间保持,而不是在用户会话的整个持续时间内.另外要注意您在ViewState中存储的信息量,因为它很容易被滥用.
有关ViewState和Session State的更多信息,请参阅: