Я недавно пойман в ловушку новым и очень странным исключением для 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.
Я могу пройти через эту ошибку, используя прямой Request.QueryString
, но мне интересно, что не так с моим кодом и почему поведение viewstate такое?