8/29/11

Sự khác nhau giữa <%= %> và <%# %> trong asp.net

Khi sang làm việc với ASP.NET MVC, chúng ta phải làm việc nhiều hơn với thẻ <%= %> và <%# %> trong ASP.NET. Và thường thì khó phân biệt được sự khác nhau giữa các thẻ đó. Sau đây là đoạn code

Trang default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Difference._Default" %>
  
  DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
  <html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
      <title></title>
  <head>
  <body>
      <form id="form1" runat="server">
      <div>
          <p>Dấu = : <%= this.TestValue %>p>
          <p>Dấu # : <%# this.TestValue %>p>
          <p>Thuộc tính trong dấu = : <asp:Label runat="server" ID="_equals" Text="<%= this.TestValue %>" />p>
          <p>Thuộc tính trong dấu # : <asp:Label runat="server" ID="_pound" Text="<%# this.TestValue %>" />p>
      </div>
      <form>
  <body>
  </html>

Và đây là CodeBehind
using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  
  namespace Difference
  {
      public partial class _Default : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {
              _testValue = "2";
          }
  
          protected void Page_PreRenderComplete(object sender, EventArgs e)
          {
              //DataBind();
              _testValue = "3";
          }
  
  
          public string TestValue
          {
              get { return _testValue; }
          }
  
          private string _testValue = "1";
      }
  }

Kết quả khi chạy như sau:
- Nếu chưa comment đoạn code DataBind(); trong PreRenderComplete
Dấu = : 3
Dấu # :
Thuộc tính trong dấu = : <%= this.TestValue %>
Thuộc tính trong dấu # :


- Nếu bỏ comment đoạn DataBind();

Dấu = : 3
Dấu # : 2
Thuộc tính trong dấu = : <%= this.TestValue %>
Thuộc tính trong dấu # : 2
Kết quả trên là do:

  1. <%= expressions %> được thực hiện tại thời gian render trang web
  2. <%# expressions %> được thực hiện khi ta gọi phương thức DataBing(), và thẻ này sẽ không được thực hiện nếu ta không gọi phương thức DataBind()
  3. <%# expressions %> có thể được sử dụng trong thuộc tính của các server controls, còn <%= %> không thể làm thuộc tính cho các server controls.

Bookmark and Share

0 comments:

Post a Comment

Next previous home

Cộng đồng yêu thiết kế Việt Nam Thiet ke website, danang