2011-04-04 1 views
0

У меня есть метод, который работает таинственным образом..NET метод с недоумением

Выполнение этого работ отлично;

FindConcept("Product"); 

Выполнение этого производит (нежелательный) другой результат, даже если значение SelCatID является «Продуктом»;

FindConcept(SelectedCategoryID); 

Где SelectedCategoryID выглядит следующим образом:

protected string SelectedCategoryID 
{ 
    get 
    { 
     if (Request["c"] != null) 
     { 
      string c = Request["c"]; 
      ViewState["SelectedCategoryID"] = c; 
      return c; 
     } 

     if (ViewState["SelectedCategoryID"] != null) 
     { 
      string cid = ViewState["SelectedCategoryID"] as string; 
      if (!string.IsNullOrEmpty(cid)) 
      { 
       return cid; 
      } 
      return ""; 
     } 
     else 
      return ""; 
    } 
} 

Это приводит меня к мысли, что должен быть какой-то странный побочный эффект в GET-метод объекта SelectedCategoryID. Я новичок в .NET, поэтому у меня нет хорошего представления о том, как работает ViewState.

Я попытался отладки это в многочисленных, как, например, я попытался это:

System.Diagnostics.Debug.WriteLine(SelectedCategoryID); 
FindConcept(SelectedCategoryID); 

Если Debug.WriteLine будет производить «Продукт», что должно означать FindConcept ведет себя, как ожидалось.

Это полностью озадачило меня. Как я должен продолжать решать эту проблему?

+1

тестов Unit ..... –

+0

Ваш вопрос не очень понятно, вы кладете в продукт и выйти продукт. Разве это не то, что вы хотите? Где ваш сеттер на SelectCategoryId? – Cyberdrew

+1

Это поведение можно объяснить только кодом внутри 'FindConcept'. –

ответ

1

ViewState в веб-формах ASP.NET выписывается в html как скрытое поле формы (закодированное и обычно зашифрованное).

Это означает, что viewstate будет доступен по запросам обратной передачи, но не будет доступен через перенаправление http.

В приведенном выше коде, это выглядит как код пытается обрабатывать как почтовые спины и другие типы запросов - потому что он использует индексатор для свойства реагирования, которые

Получает указанный объект в Куки , форма, QueryString или ServerVariables http://msdn.microsoft.com/en-us/library/system.web.httprequest.item%28VS.71%29.aspx

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

Отредактировано - Пример

Есть много способов, это может выглядеть, вот простой пример: Например, предположим, что на одной странице вы извлекаете «SelectedCategoryID» из базы данных в GridView. В сценариях по умолчанию это будет храниться в Gridview на странице и будет доступно в представлении просмотра при отправке обратно на ту же страницу (см. http://www.xefteri.com/articles/show.cfm?id=18 и http://msdn.microsoft.com/en-us/library/ms972976.aspx).

Однако предположим, что на кнопку мыши вы сделали что-то в ответ на нажатие кнопки, такие как

Response.Redirect("SomeOtherPage.aspx") 

В этом случае ViewState на «SomeOtherPage.aspx» не будет содержать значение, так что ваш добытчик будет искать значение в других местах, таких как URL.В этом случае, вы могли бы пройти «SelectedCategorID» вместе с чем-то таким, как

Response.Redirect("SomeOtherPage.aspx?c=" + HttpUtility.UrlEncode(selectedCategoryId)); 
+0

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

+0

@ Emil - Отредактированный ответ, чтобы привести пример – Nathan

Смежные вопросы