Почему эта переменная не получает правильное значение? - PullRequest
2 голосов
/ 28 мая 2019

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

В контроллере я объявляю переменную, использую выражение, чтобы дать ей значение, и присвойте это значение объекту Session. В представлении я извлекаю значение из сеанса и сохраняю его в новом bool. Я также создал некоторые другие логические значения в том же контроллере и представлении. По какой-то причине, хотя другие логические переменные работают правильно, эта не работает.

// In the controller:
bool isDatabaseRecipeRevisionSame = true;

// This evaluates to true:
isDatabaseRecipeRevisionSame = editedRecipe.Revision == savedRecipe.Revision;

Session["match"] = isDatabaseRecipeRevisionSame;


// In the view:
bool isRecipeRevisionSame = (bool)Session["match"];

// or:
bool isRecipeRevisionSame =Convert.ToBoolean(Session["match"]);

Независимо от того, преобразую ли я или преобразую объект сеанса в логическое значение в представлении, результат будет ложным. Если я приведу тот же объект сеанса к целому числу, я получу ноль, а с помощью ToString () я получу «False». Я не понимаю, как некоторые из них работают, как ожидалось, а этот нет. Может кто-нибудь посоветовать, пожалуйста?

Заранее спасибо.

Редактировать: ответы на комментарии.

Переменные Recipe.Revision являются целыми числами. SaveRecipe извлекается из базы данных, редактируется и сохраняется локально как editedRecipe. Перед сохранением правок обратно в базу данных saveRecipe.Revision снова извлекается из БД, чтобы подтвердить, что никто другой не изменил версию БД с момента ее первого извлечения. Если ревизии совпадают, то изменения сохраняются в БД.

Нет других потоков, изменяющих эти значения, и в настоящее время нет пользователей, кроме меня, использующих эту базу данных. Я на самом деле повторил эту проблему сегодня в одном методе, поэтому я думаю, что DBro, вероятно, прав в том, что проблема чувствительности к регистру. С тех пор, как я опубликовал этот вопрос, я изменил часть кода для использования ViewBag, поэтому мне, возможно, больше не придется его переделывать.

Спасибо за совет.

1 Ответ

0 голосов
/ 29 мая 2019

По вашему мнению, используйте HttpContext.Current.Session вместо Session, как показано ниже:

// In the view:
var session = HttpContext.Current.Session["match"];
bool isRecipeRevisionSame = (bool)session;
...