У меня есть реальная неустойчивая ситуация, когда мой 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]: Добавлен код в соответствии с запросом. Изначально не делал этого, так как я понял, что код не может быть проблемой. Он работает в одной версии, а не в другом.
Huh. Я думаю, вы должны показать свой код. Должно быть что-то специфическое для параметров, которые передаются. – Doomsknight
делает вашу страницу с обновленной панелью лучше показать нам разметку, а также что делает эта ссылка. – Devjosh
Возможно, есть исключение, возникшее при создании GridView после обратной передачи ссылки? Вы проверяли ошибки с помощью try/catch? – Brissles