Я унаследовал обслуживание приложения ASP.NET и теперь должен разработать функцию, которая немного сгибает мой разум, хотя я знаю, что ответ должен быть простым, на данный момент этот ответ ускользает от меня.Скрыть Div в зависимости от значения привязки данных в UserControl
Итак, у меня есть элементы управления ретрансляторами внутри UserControl. Для этого ретранслятора данные привязаны по коду, а затем отображаются соответственно в Детском элементе ретранслятора. Каждый раз, когда элемент привязан к коду, выполняется выполнение функции, и я не понимаю, что она делает.
Это код asp.net:
<asp:Repeater ID="rptDocumentsForCategory" runat="server">
<ItemTemplate>
<div style="padding: 0px 10px;">
<a target="_blank" href='<%#EncoderService.HtmlAttributeEncode(DataBinder.Eval(Container.DataItem, "DocumentUrl") as string)%>'><asp:Literal ID="Literal1" runat="server" Text='<%#EncoderService.HtmlEncode(DataBinder.Eval(Container.DataItem, "DocumentName") as string)%>'></asp:Literal></a>
<%if (Mode == Curriculum.BLL.ControlMode.Edit)
{ %>
<asp:ImageButton ID="btnEdit" Height="10px" ImageUrl="~/Styles/Images/edit.png" ToolTip='<%$Resources:Main,Dialog_Title_UpdateWorkDocument%>' CommandName="EditItem" CommandArgument='<%#Eval("DocumentId")%>' runat="server" />
<asp:ImageButton ID="btnDelete" Height="10px" OnClientClick="javascript:return ShowConfirmationPopup();" ImageUrl="~/Styles/Images/delete.png" ToolTip='<%$Resources:Main,DeleteDocument%>' CommandName="DeleteItem" CommandArgument='<%#Eval("DocumentId")%>' runat="server" />
<%} %>
<div class="ViewWorkDocumentsFileData">
<%--<asp:Literal ID="LtDocDate" runat="server" Text='<%#Utilities.FormatDateTimeToDisplay(DataBinder.Eval(Container.DataItem, "DocumentDate"))%>'></asp:Literal>--%>
<asp:Literal ID="LtDocSize" runat="server" Text='<%#Utilities.ConvertBytesToKilobytes((int)DataBinder.Eval(Container.DataItem, "DocumentSize"))%>'></asp:Literal> Kb  | 
<asp:Literal ID="LtDocExt" runat="server" Text='<%#EncoderService.HtmlEncode(DataBinder.Eval(Container.DataItem, "DocumentExtension") as string)%>'></asp:Literal>
<div ID="DocumentCreationInfoPanel" runat="server" >
<asp:Literal ID="LtCreatedByLabel" runat="server" Text='<%$Resources:Main,CreatedBy_Label%>'></asp:Literal>
<asp:Literal ID="LtDocModification" runat="server" Text='<%#EncoderService.HtmlEncode(Curriculum.DataAccess.Membership.Users.GetUserDiplayNameForUsername(DataBinder.Eval(Container.DataItem, "DocumentCreatedBy") as string))%>'></asp:Literal> | 
<asp:Literal ID="LtDocDate" runat="server" Text='<%#Utilities.FormatDateTimeToDisplay(DataBinder.Eval(Container.DataItem, "DocumentDate"))%>'></asp:Literal>
</div>
<div ID="DocumentModifiedInfoPanel" runat="server" >
<asp:Literal ID="LtModifiedByLabel" runat="server" Text='<%$Resources:Main,ModifiedBy_Label%>'></asp:Literal>
<%--<asp:Literal ID="LtModifiedBy" runat="server" Text='<%#EncoderService.HtmlEncode((DataBinder.Eval(Container.DataItem, "DocumentModifiedBy") != DBNull.Value) ? Curriculum.DataAccess.Membership.Users.GetUserDiplayNameForUsername(DataBinder.Eval(Container.DataItem, "DocumentModifiedBy") as string) : HideDocumentsDetailInfo(DataBinder.Eval(Container.DataItem, "DocumentModifiedBy")))%>'></asp:Literal>--%><%-- | --%>
<asp:Literal ID="LtModifiedBy" runat="server" Text='<%#EncoderService.HtmlEncode(Curriculum.DataAccess.Membership.Users.GetUserDiplayNameForUsername(DataBinder.Eval(Container.DataItem, "DocumentModifiedBy") as string))%>'></asp:Literal> | 
<%--<asp:Literal ID="LtModifiedDateLabel" runat="server" Text='<%$Resources:Main,ModifiedDate_Label%>'></asp:Literal>--%>
<%--<asp:Literal ID="LtModifiedDate" runat="server" Text='<%#Utilities.FormatDateTimeToDisplay(DataBinder.Eval(Container.DataItem, "DocumentModifiedDate") as string) %>'></asp:Literal>--%>
<asp:Literal ID="LtModifiedDate" runat="server" Text='<%#Utilities.FormatDateTimeToDisplay(DataBinder.Eval(Container.DataItem, "DocumentModifiedDate")) %>'></asp:Literal>
</div>
</div>
</div>
</ItemTemplate>
<SeparatorTemplate>
<div></div>
</SeparatorTemplate>
</asp:Repeater>
Теперь большая часть кода была уже там. Я добавил здесь код внутри DocumentModifiedInfoPanel, чтобы показать дату изменения и пользователя для этой части страницы (это связано с «прилагаемыми» документами). Теперь, если у меня нет измененной даты, этот div должен быть скрыт (он все равно может отображать, но оставаться невидимым), и я не могу этого сделать.
Вот мой (отношение) с фоновым кодом:
protected void rptDocCategories_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.EditItem ||
e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.SelectedItem)
{
Repeater rptDocumentsForCategory = (Repeater)e.Item.FindControl("rptDocumentsForCategory");
rptDocumentsForCategory.ItemCommand += new RepeaterCommandEventHandler(rptDocumentsForCategory_ItemCommand);
}
}
protected void rptDocCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.EditItem ||
e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.SelectedItem)
{
Literal LtDocCategoryId = (Literal)e.Item.FindControl("LtDocCategoryId");
Repeater rptDocumentsForCategory = (Repeater)e.Item.FindControl("rptDocumentsForCategory");
var ds = WorksDocumentCategories.GetDocumentsForCategoryAndWork(WorkId, int.Parse(LtDocCategoryId.Text));
rptDocumentsForCategory.DataSource = ds;
rptDocumentsForCategory.DataBind();
}
}
public string HideDocumentsDetailInfo(object DBValue)
{
foreach (RepeaterItem item in rptDocCategories.Items)
{
HtmlGenericControl div = (HtmlGenericControl)Utilities.Utilities.FindControlRecursive(item, "DocumentModifiedInfoPanel");
if (div.ID == "DocumentModifiedInfoPanel" && DBValue == DBNull.Value)
{
div.Attributes.Add("style", "display: none");
}
}
return "";
}
Теперь метод HideDocumentsDetailInfo
был написан мной. Вы можете попытаться увидеть, как я использую его на первой прокомментированной строке внутри DocumentModifiedInfoPanel
. Этот подход почти работает, но последний элемент в списке прилагаемых документов всегда будет показывать div с «пустой» датой изменения вместо hdding.
Я также заметил, что метод rptDocCategories_ItemDataBound
выполняется ПОСЛЕ моего собственного HideDocumentsDetailInfo
, и я подозреваю, что это может быть причиной того, что я не могу скрыть последний элемент в «списке» элементов, которые нужно скрыть.
Как последнее замечание, я как бы проиграл, если и как могу это сделать в событии ItemDataBound, так как я не вижу способ доступа к значению свойств.
Любые мысли об этом, пожалуйста?
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Ну, это актуально не тегом, а скорее тем, как я пытаюсь это сделать, но, учитывая сходство, я предполагаю, что это приемлемо. –
Оно больше походило на метаданные, чем на данные, если вы знаете, что я имею в виду. –