Viewstate имеет значение, но при обратной передаче возвращает System.NullReferenceException - PullRequest
1 голос
/ 27 февраля 2020

Я недавно пойман в ловушку новым и очень странным исключением для ViewState при обратной передаче страницы. Я хочу установить ViewState один раз, если страница не является обратной передачей (при первой загрузке), а затем использовать ее снова при следующей обратной передаче, если это произошло.
Код определяется на page_Load следующим образом:

if (!string.IsNullOrEmpty(Request.QueryString["id"])){
   if (Guid.TryParse(Request.QueryString["id"], out var id)){
      ViewState["mesId"] = id;
      if (!IsPostBack)
       {
          LoadData(id);
       }
       if (IsPostBack)
       {
           if (Request.Form["btnSend"] != null)
           {
               if (ViewState["mesId"] != null)
               {
                  string g = ViewState["msgId"].ToString();
                  if (Xss.GUID_Validate(g))
                  {
                       Guid mesGuid = Guid.Parse(ViewState["mesId"].ToString());
                       Send_Message(mesGuid);
                  }
               }
           }
        }
   }
}


После того, как страница загружается и не отправляется обратно, все в порядке, но если я вызову btnSend для выполнения обратной передачи, ViewState ["mesId"] сохранит свои значения и будет грязным, но выдает ноль и Object reference not set to an instance of an object.

error img
Я могу пройти через эту ошибку, используя прямой Request.QueryString, но мне интересно, что не так с моим кодом и почему поведение viewstate такое?

1 Ответ

1 голос
/ 27 февраля 2020

Вы, похоже, устанавливаете и проверяете ViewState["mesId"], но затем выдает сбой при загрузке ViewState["msgId"].

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

...