2012-01-17 3 views
0

У меня есть реальная неустойчивая ситуация, когда мой GridView исчезает при щелчке ссылки на нашем производственном сервере.Gridview исчезает по ссылке нажмите

Это работает так:

  • Пользователь делает поиск, GridView получает генерируется
  • На генерации страницы, ссылка получает генерируется
  • пользователь нажимает на ссылку, и GridView исчезает.

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

Что делает это еще более странным, так это то, что это происходит только на нашем сервере производства IIS. Если я создаю новый сайт под IIS с точно таким же скомпилированным кодом, точно такими же строками подключения DB и т. Д., GridView работает.

Здесь секция, которая содержит GridView:

<div class="PGE_SearchResult">  
<asp:Panel ID="pnlWrapper" runat="server" CssClass="addSearchPanelStyle">   
    <asp:GridView ID="gvExistingPatientsSearch" runat="server" AutoGenerateColumns="false" DataKeyNames="PatientId" CssClass="addSearchGridViewStyle" 
     AlternatingRowStyle-CssClass="STD_GridView_AlternateRow" RowStyle-CssClass="STD_GridView_Row" 
     HeaderStyle-CssClass="gvFixedHeader" FooterStyle-CssClass="STD_GridView_Footer" 
     OnRowDataBound="gvExistingPatientsSearch_RowDataBound"> 
     <Columns> 
      <asp:TemplateField HeaderText="Patient ID" ItemStyle-CssClass="PGS_PSR_PatientID"> 
       <ItemTemplate> 
        <asp:LinkButton ID="lnkPatientSearch" runat="server" Text='<%# Bind("PatientId")%>' OnClick="OnPatientIDClick" CommandArgument='<%# Eval("PatientId")+ ";" + Eval("PatientStatus")+ ";" + Eval("DOB") + ";" + Eval("DiseaseStates") + ";" + Eval("DiseaseStateIds")%>'></asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField DataField="PatientName" HeaderText="Patient Name" ItemStyle-CssClass="PGS_PSR_Site"/> 
      <asp:BoundField DataField="DOB" HeaderText="Date of Birth" HtmlEncode="False" ItemStyle-CssClass="PGS_PSR_DOB"/> 
      <asp:TemplateField HeaderText="Site(s)" SortExpression="Site" ItemStyle-CssClass="PGS_PSR_Site"> 
       <ItemTemplate> 
        <asp:Label ID="lblSiteSearch" runat="server" Text='<%# Bind("Site")%>'></asp:Label>       
       </ItemTemplate> 
      </asp:TemplateField>    
      <asp:BoundField DataField="SiteMRN" HeaderText="Site MRN" HtmlEncode="False" ItemStyle-CssClass="PGS_PSR_DOB"/> 
      <asp:TemplateField HeaderText="Disease State(s)" ItemStyle-CssClass="PGS_PSR_Site"> 
       <ItemTemplate> 
        <asp:Panel ID="diseaseStatePanel" runat="server"> 
        </asp:Panel> 
      </ItemTemplate> 
      </asp:TemplateField>       
     </Columns> 
    </asp:GridView> 
</div> 

код, который генерирует строки для GridView заключается в следующем:

protected void gvExistingPatientsSearch_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    DataRowView patientData = (DataRowView)e.Row.DataItem; 
    string diseaseStates = patientData["DiseaseStates"] as string; 
    string diseaseStateIds = patientData["DiseaseStateIDs"] as string; 
    int PatientID = (int)patientData["PatientId"]; 
    int patientStatus = (int)patientData["PatientStatus"]; 
    DateTime DOB = DateTime.Parse(patientData["DOB"] as string); 
    if (e.Row.RowIndex != -1) 
    { 
     e.Row.Cells[2].Enabled = true; 

     LinkButton lnkPatientSearch = (LinkButton)e.Row.FindControl("lnkPatientSearch"); 
     lnkPatientSearch.Enabled = false; 

     Panel diseaseStatePanel = (Panel)e.Row.FindControl("diseaseStatePanel"); 
     BuildDiseaseStateLinks(diseaseStatePanel, diseaseStates, diseaseStateIds, PatientID, patientStatus, DOB, true); 
    } 
} 

Ниже приведен способ BuildDiseaseStatelinks()

private void BuildDiseaseStateLinks(Panel diseaseStatePanel, string diseaseStates, string diseaseStateIDs, int PatientID, int patientStatus, DateTime DOB, bool isAllowed) 
{ 
    string[] diseaseStateIdsSplit = diseaseStateIDs.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); 

    string[] diseaseStateSplit = diseaseStates.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); 

    for (int i = 0; i < diseaseStateSplit.Length; i++) 
    { 
     string diseaseState = diseaseStateSplit[i]; 
     string diseaseStateID = diseaseStateIdsSplit[i]; 

     LinkButton diseaseStateLink = new LinkButton(); 
     diseaseStateLink.Attributes.Add("style", "float:left"); 
     diseaseStateLink.Text = diseaseState; 
     diseaseStateLink.CommandArgument = 
      PatientID + "|" + patientStatus + "|" + DOB.ToShortDateString() + "|" + diseaseState + "|" + diseaseStateID; 

     if (isAllowed) 
     { 
      diseaseStateLink.CommandArgument += "|Allowed"; 
     } 
     else 
     { 
      diseaseStateLink.CommandArgument += "|NotAllowed"; 
     } 

     diseaseStateLink.CommandName = "OnDiseaseStateLinkClick"; 
     diseaseStateLink.Command += new CommandEventHandler(OnDiseaseStateLinkClick); 

     diseaseStatePanel.Controls.Add(diseaseStateLink); 

     if (i < diseaseStateSplit.Length - 1) 
     { 
      Label splitLabel = CreatePipeLabel(); 
      diseaseStatePanel.Controls.Add(splitLabel); 
     } 
    } 
} 

gvExistingPatientsSearch привязывается в 2-х местах, когда s нажмите кнопку мыши, и на Page_Load, но только если пользователь был перенаправлен на текущую страницу с поиском в качестве QueryString.

После того, ссылка была нажата, несколько Session переменных получить набор (те, найдены на CommandArguments набор в BuildDiseaseStateLinks и пользователь перенаправляется на другую страницу.

Что я мог не быть? Код является То же самое, DB - то же самое, настройки IIS идентичны (за исключением пулов приложений, один использует классический (Prod/Live) и другой Integrated, я переключил Prod/Live на Integrated и ничего не сделал.

Предложения, комментарии, все!

Thanks in авансовый.

[EDIT]: Добавлен код в соответствии с запросом. Изначально не делал этого, так как я понял, что код не может быть проблемой. Он работает в одной версии, а не в другом.

+0

Huh. Я думаю, вы должны показать свой код. Должно быть что-то специфическое для параметров, которые передаются. – Doomsknight

+0

делает вашу страницу с обновленной панелью лучше показать нам разметку, а также что делает эта ссылка. – Devjosh

+1

Возможно, есть исключение, возникшее при создании GridView после обратной передачи ссылки? Вы проверяли ошибки с помощью try/catch? – Brissles

ответ

1

Выяснил проблему. Разница между безопасным сайтом и тем, что нет, на самом деле разница была * http *** s ** и http, да s - вот что вызвало проблему. Причина заключается в том, что я перепроверяю DataSource на OnInit, так что, когда нажимается ссылка, событие создается и запускается. Это было решением кого-то suggested на question Я спросил некоторое время назад.

То, что я делал, было это:

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 

    // if being redirected from another page, remove the search attributes 
    // so it doesn't load the Search Grid view 
    if (Page.Request.UrlReferrer != Page.Request.Url) 
    { 
     Session[UNMGeneralConstants.SearchAttributes] = null; 
    } 

    UserManagementBO userManagementBO = new UserManagementBO(); 
    dsUserInSites = userManagementBO.GetSitesNameForUser(new Guid(Session[SessionVariables.Ses_UserId].ToString())); 

    DataSet dsSearchResults2 = Session[UNMGeneralConstants.SearchAttributes] as DataSet; 
    if (dsSearchResults2 != null && dsSearchResults2.Tables.Count != 0) 
    { 
     gvExistingPatientsSearch.DataSource = dsSearchResults2; 
     gvExistingPatientsSearch.DataBind(); 
    } 
    else 
    { 
     gvExistingPatientsSearch.DataSource = null; 
     gvExistingPatientsSearch.DataBind(); 
    } 
} 

это было if (Page.Request.UrlReferrer != Page.Request.Url) заявление, которое вызывает проблемы, так как UrlReferrer был https и Url не сделал. Вместо этого я заменил оператор if на if(Page.Request.UrlReferrer.LocalPath != Page.Request.Url.LocalPath). Кажется, это работает после тестирования.

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

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