#c# #asp.net
#c# #asp.net
Вопрос:
Я использую следующий код.
файл .ascx:
<div class="DemoArea">
<asp:Button ID="btnCaseComplete" runat="server" Text="Case Complete" CssClass="btn_contentlist"
onclick="btnCaseComplete_Click" OnClientClick="scroll(0,0);$.loading({mask: true, effect: 'ellipsis update'});"/>
<ComponentArt:Dialog ID="caDropDownDialog" runat="server" Modal="true" Alignment="MiddleCentre" AllowDrag="true" AllowResize="false" AnimationDuration="1000"
CloseTransition="Fade" RenderOverWindowedObjects="true" ShowTransition="Fade" AnimationType="Outline" CssClass="ModalMask">
<Header><p class="header">Case Complete</p></Header>
<Content>
<asp:Panel ID="panSelectArea" runat="server" CssClass="modalMaskContent">
<p><span class="red">Please Note:</span>Once you click
<span class="bold">Ok</span>, your
case will be Submitted to ACR and you will not be able to edit the Case again.
<span class="style2">To continue editing the case, click </span>
<span class="bold">Cancel</span>. You will be taken back
to the Case Wizard and your case will not be submitted to ACR.</p>
</asp:Panel>
</Content>
<Footer>
<center class="modalMaskFooter">
<asp:Button ID="btnOK" runat="server" CausesValidation="false"
CssClass="btn_contentlist" OnClientClick="caDropDownDialog.IsShowing=false" Text="OK" />
<asp:Button ID="btnCancel" runat="server" CausesValidation="false"
CssClass="btn_contentlist" OnClientClick="caDropDownDialog.Close();" Text="Cancel" />
</center>
</Footer>
</ComponentArt:Dialog>
</div>
Код, лежащий в основе:
CaseContentList obj = new CaseContentList(); // creating the object of case content list control to this page
LinkButton lbtn = (LinkButton)((DataList)obj.FindControl("dlstContentList")).FindControl("lbtnDisplay");
if (lbtn.Text == "Final Page")
{
caDropDownDialog.IsShowing = true;
}
else
Page.ClientScript.RegisterStartupScript(this.GetType(), "Window", "alert('Add Final Page First.');", true);
Но это выдает ошибку «ссылка на объект не установлена на экземпляр объекта».
Комментарии:
1. Это означает, что вы либо приводите его неправильно, либо ссылаетесь не на правильный объект, пожалуйста, вставьте свой aspx-код
2. Я думаю, что одно из ваших
FindControl
утверждений завершается ошибкой. Попробуйте добавить проверку на null перед использованием основанного элемента управления.3. В каком событии вы вызываете этот код?
Ответ №1:
Это вызвано результатом одного из методов «FindControl()». Результатом является NULL, а не экземпляр элемента управления.
Необходимо проверить наличие null:
bool found = false;
var dlstContentList = obj.FindControl("dlstContentList");
if ( null != dlstConentList ) {
var lbtnDisplay = dlstContentList.FindControl("lbtnDisplay");
found = (null != lbtnDisplay);
}
if ( found ) {
// ... do something
}
else {
// ... do something else
}
Комментарии:
1. Ситуация такая же. Вы, вероятно, запускаете код до создания элементов управления. Элементы управления создаются на этапе «Инициализации» страницы.
Ответ №2:
CaseContentList cl = (CaseContentList)this.Parent.TemplateControl.FindControl("ContentList");
if(cl.IsFinalPage)
caDropDownDialog.IsShowing = true;
else
Page.ClientScript.RegisterStartupScript(this.GetType(), "Window", "alert('Please add Final Page to complete your case');", true);
Ответ №3:
Если это DataList, и вы ищете LinkButton, то я бы ожидал, что вам нужно будет перебрать каждый ListItem в DataList для того, который вы хотите, затем найдите элемент управления в этом ListItem
Для перебора ваших списков в DataList вы могли бы сделать это
foreach (DataListItem dataListItem in obj.Items) {
if (dataListItem .ItemType == ListItemType.AlternatingItem | dl.ItemType == ListItemType.Item) {
//
// find the control here.
}
}
Комментарии:
1. не могли бы вы, плз, рассказать мне о цикле, как найти его с помощью цикла
2. проверьте отредактированный ответ. перебирает ваши DataListItems DATALISTISTITEMS