12.2.09

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

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.

2 comments:

  1. hì, a Hà Đoàn Mạnh đang học MVC à, có thể cho e IM để liên lạc được không vì e cũng đang theo đuổi ngôn ngữ lập trình mới mẻ này :)

    ReplyDelete
  2. Chào bạn,
    Nick yahoo của mình là: chen_dang86
    Hoặc bạn có thể addnick facebook của mình là:
    chen_dang86@yahoo.com

    Thanks~

    ReplyDelete