Сохранение переменной в запросах - PullRequest
2 голосов
/ 22 января 2012

Я понимаю, что это может быть простой проблемой, но я новичок в ASP.net (C #) и у меня возникла проблема с методом, в котором я передаю объект 'Ride', который был получен из базы данных SQL через LINQ заявление для юридических лиц. Я пытаюсь установить другую глобальную переменную на значение атрибута Ride.identity (который является длинным), но в следующем методе, когда я пытаюсь использовать это значение, новое значение не сохраняется. Какие-нибудь мысли? Если мне не хватает некоторого постбека, который повторно инициализирует эту переменную, есть ли способ сохранить его? Спасибо.

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(); 
    }
}

Ответы [ 3 ]

6 голосов
/ 22 января 2012

Сохранить значение в ViewState.Например:

ViewState["RideId"] = ride.identity;

Когда вы идете и используете его в строке кода, вам нужно будет сделать следующее:

id_ridePendingConfirm = (long)ViewState["RideId"];

Но будьте осторожны.Поскольку 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;
    }
} 

Затем в своем коде сделайте следующее:

// Assignment before postback so that you can preserve the state:
CurrentRideId = ride.identity;

// After postback in the method you have above:
id_ridePendingConfirm = CurrentRideId;

Теперь, так как я не знаючто должен делать ваш код, когда нет идентификатора Ride, я выбрал -1, но это зависит от того, что на самом деле нужно вашему коду.

Я не рекомендую состояние сеанса для вашего сценария, потому что это, очевидно, должно сохраняться междупостбэки страниц, а не на всю продолжительность сеанса пользователя.Также будьте осторожны с тем, сколько информации вы храните во ViewState, потому что с ней можно легко злоупотреблять.

Для получения дополнительной информации о ViewState и состоянии сеанса см .:

2 голосов
/ 22 января 2012

См. этот вопрос и мой ответ для нескольких методов хранения данных между выполнениями страницы. Вкратце, вам нужно хранить значение где-то между постбэками. ASP.NET (и .NET в целом) предоставляют различные инструменты для этого, но между запросами ничего не делается автоматически. Страница создается, выполняется и уничтожается при каждом запросе.

2 голосов
/ 22 января 2012

Переменные и поля не сохраняются во всех обратных передачах.

Вам необходимо использовать состояние сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...