C# asp.net控件在此上下文中不支持代码块

C# asp.net控件在此上下文中不支持代码块,c#,asp.net,code-behind,C#,Asp.net,Code Behind,我正在创建一个html表。我想隐藏表行。我将属性runat=server和id放在特定行中,但是该行中有客户端代码,类似于下面的代码 <% if ((strFlag=="d") || (strApprvdFlag=="y")) {%> 打了这个电话后,我发现了这个错误 asp.net控件在此上下文中不支持代码块 下面是我的示例代码: <table> <tr colspan="4" ID="trMedical" scriptrunat="server"&g

我正在创建一个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>

G
医学的

runat='server'
添加到HTML控件时,会更改呈现方式,内部不支持代码块。因此,如果有需要更改的属性(样式?类?),您可能必须这样做,而不是这样做:

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

可以使用数据绑定来控制控件的可见性。那应该能解决你的问题

<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>

您好,非常感谢..现在我遇到了这个错误,服务器标记不能包含构造。您的行不能包含runat='Server'。但我需要runat Server属性..那么我如何在代码中隐藏该行..给出任何想法您可以将其包装为一行,为什么不能在一行中包含runat='Server'。我将占位符放在表行中。。。但是我得到了这个错误System.Web.UI.HtmlControl.HtmlTableCellCollection必须具有“System.Web.UI.HtmlControl.HtmlTableCell”类型的项asp:PlaceHolder的类型为System.Web.UI.WebControls.PlaceHolder。我从未尝试将此技术应用到应用程序中。您真的需要TR作为服务器端控件吗?
protected string GetRowProperties()
{
    return "class='myclass'"; // something like this
}
<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>
protected override void OnLoad(EventArgs e) {
    base.OnLoad(e);

    Page.DataBind();
}