Блоки кода в этом контексте не поддерживаются в asp.net control

Я создаю одну таблицу html. Я хочу скрыть строку таблицы. Я помещаю атрибуты runat=server и id для конкретной строки, но строка имеет код на стороне клиента, подобный следующему коду.

<% if ((strFlag=="d") || (strApprvdFlag=="y")) {%>

После вызова этой строки я получил эту ошибку.

Блоки кода в этом контексте не поддерживаются в элементе управления asp.net.

Ниже приведен пример кода:

<table>
  <tr colspan="4" ID="trMedical"  scriptrunat="server">
    <td style="WIDTH: 45px;HEIGHT: 12px" align="left" class="LabelTaxText" width="45"><b>G&nbsp;
        </b>
    </td>
    <td style="WIDTH: 182px;HEIGHT: 12px" class="LabelTaxText" align="left" width="182"
        colSpan="2">Medical
    </td>
    <td style="WIDTH: 81px; HEIGHT: 12px" align="right" class="LabelTaxText" width="81">
        <asp:textbox onchange="onChangeFlag(),intOnly(this);" onkeyup="intOnly(this);" onkeypress="return CheckNumericWithOutDecimals(event)"
            id="TxtMedical" tabIndex="24" runat="server" Width="96px" MaxLength="12" style="Z-INDEX: 0"></asp:textbox>
    </td>
    <% if ((strFlag=="d") || (strApprvdFlag=="y")) {%>
        <td class="LabelTaxText" style="WIDTH: 107px; HEIGHT: 12px" align="right" width="107">
            <asp:textbox onchange="onChangeFlag(),intOnly(this);" onkeyup="intOnly(this);" onkeypress="return CheckNumericWithOutDecimals(event)" id="TxtMedicalProof" tabIndex="24"     onblur="charAlert(TxtMedical,TxtMedicalProof)" runat="server" MaxLength="12" Width="96px">
            </asp:textbox>
        </td>
    <% } %>
    <% if (strApprvdFlag=="y") {%>
        <td class="LabelTaxText" style="WIDTH: 68px; HEIGHT: 24px" align="right" width="68">
            <asp:textbox id="TxtMedicalApproved" tabIndex="24" runat="server" MaxLength="12" Width="96px"></asp:textbox>
        </td>
        <td class="LabelTaxText" style="WIDTH: 43px">&nbsp;
            <asp:Label ID="lblMedicalRemarks" Runat="server"></asp:Label>
        </td>
    <% } %>
  </tr>
</table>

Ответ 1

Когда вы добавляете элемент runat='server' в элемент управления HTML, который вы изменяете, рендеринг и блоки кода не поддерживаются внутри. Итак, если есть свойства, которые вам нужно изменить (стиль? Класс?), Вам, вероятно, придется это сделать:

<tr id='myrow' runat='server'>
    <td> 
        your code here
    </td>
</tr>

Сделайте что-то вроде этого:

<tr id='myrow' <%= GetRowProperties() %>>
    <td> 
        your code here
    </td>
</tr>

Примечание: runat='server' удалено из tr. Затем в вашем коде вы можете сделать что-то вроде этого:

protected string GetRowProperties()
{
    return "class='myclass'"; // something like this
}

Ответ 2

Вы можете использовать привязку данных для управления видимостью элемента управления. Это должно решить вашу проблему.

<tr runat="server">

    some content...

    <asp:PlaceHolder runat="server"
        visible='<%# (strFlag=="d") || (strApprvdFlag=="y") %>'>

        This content will only be rendered if strFlag is "d" or "y"

    </asp:PlaceHolder>

    more content...

</tr>

В вашем методе OnLoad вам нужно вызвать метод DataBind() либо для PlaceHolder, либо для любого элемента управления, который содержит его, например tr или even Page:

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

    Page.DataBind();
}