2011-02-01 29 views
11

Tôi đang tạo một bảng html. Tôi muốn ẩn hàng của bảng. Tôi đang đặt các thuộc tính runat=serverid cho hàng cụ thể, nhưng hàng có mã phía máy khách trong nó tương tự như mã sau đây.khối mã không được hỗ trợ trong ngữ cảnh này trong điều khiển asp.net

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

Sau khi gọi đường này, tôi gặp lỗi này.

Các khối mã không được hỗ trợ trong ngữ cảnh này trong điều khiển asp.net.

Dưới đây là mẫu mã của tôi:

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

Trả lời

17

Khi bạn thêm một runat='server' với một điều khiển HTML bạn thay đổi render và mã khối không được hỗ trợ bên trong. Vì vậy, nếu có là tài sản bạn cần thay đổi có lẽ bạn phải thay vì làm điều này (phong cách lớp?):

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

Làm như thế này:

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

Lưu ý:runat='server' khỏi tr. Sau đó, trong codebehind của bạn, bạn có thể làm một cái gì đó như thế này:

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

hi cảm ơn bạn rất nhiều .. tôi đã nhận được lỗi này Các thẻ máy chủ không thể chứa các cấu trúc <% ... %>. – mathirengasamy

+1

Hàng của bạn KHÔNG THỂ có runat = 'server' trong đó. – Keltex

+0

nhưng tôi cần tài sản máy chủ runat .. sau đó làm thế nào tôi có thể ẩn hàng trong mã phía sau..give bất kỳ ý tưởng – mathirengasamy

5

Bạn có thể sử dụng ràng buộc dữ liệu để kiểm soát khả năng hiển thị của điều khiển. Điều đó sẽ giải quyết vấn đề của bạn.

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

On phương pháp onload của bạn, bạn sẽ cần phải gọi DataBind() phương pháp để hoặc là giữ chỗ, hoặc bất kỳ điều khiển mà chứa nó, giống như tr hoặc thậm chí Page:

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

    Page.DataBind(); 
} 
+0

tôi đặt giữ chỗ bên trong hàng bảng ... nhưng tôi đã nhận lỗi này System.Web.UI.HtmlControls.HtmlTableCellCollection phải có các mục thuộc loại 'System.Web.UI.HtmlControls.HtmlTableCell'. 'asp: PlaceHolder' thuộc loại 'System.Web.UI.WebControls.PlaceHolder'. – mathirengasamy

+0

Tôi chưa bao giờ thử sử dụng kỹ thuật này thành . Bạn có thực sự cần TR để trở thành một điều khiển phía máy chủ không? –

Các vấn đề liên quan