Как создать два ContentPlaceHolder с одинаковым идентификатором в ASP.NET ?

#asp.net #asp.net-mvc #master-pages

#asp.net #asp.net-mvc #мастер-страницы

Вопрос:

Я не хочу иметь две основные страницы, поэтому я пытаюсь сделать это (опустил <% %> для удобства чтения):

 if (a == b)
{
    <asp:ContentPlaceHolder ID="X" runat="server" />
}
else
{
    <div class="c">
        <asp:ContentPlaceHolder ID="X" runat="server" />
    </div>
}
  

Но это не позволит мне:

 Duplicate ContentPlaceHolder 'X' were found. ContentPlaceHolders require unique IDs.
  

Итак, я попытался установить идентификаторы с помощью ID=»<%= «X» %>» и нет, мне это тоже не позволяет:

 Server tags cannot contain <% ... %> constructs.
  

Затем я попробовал <%# Eval(«X») %> и нет:

 The ID property of a control can only be set using the ID attribute in the tag and a simple value. Example: <asp:Button runat="server" id="Button1" />
  

Есть ли какой-нибудь способ добиться того, что я пытаюсь сделать? Я думал что-то вроде

 echo '<asp:ContentPlaceHolder ID="X" runat="server" />'
  

Или какой-либо динамический способ добавления тега, потому что, по-видимому, анализатор не может идентифицировать блок if else, который не позволяет двум тегам иметь одинаковый идентификатор.

Я использую MVC с механизмом просмотра по умолчанию.

Ответ №1:

Вы пробовали подобное:

 <% var isAEqualB = a == b; %>

if (isAEqualB)
{
    <div class="c">
}

<asp:ContentPlaceHolder ID="X" runat="server" />

if (isAEqualB)
{
    </div>
}
  

Комментарии:

1. Отлично. Это один из тех ответов «почему-я-не-додумался-до-этого».