将属性分配给元素或将其直接放入标记之间的区别

时间:2012-03-25 16:31:52

标签: c# asp.net

这样做有什么不同:

<a href="<%=this.GetUserProfilePermalink()%>"><%=this.GetUsername()%></a>

和此:

<a id="hlUser" runat="server"></a>
代码隐藏中的

hlUser.HRef = GetUserProfilePermalink();

hlUser.InnerText = GetUsername();

我注意到我的代码隐藏更容易读取,因为我把所有的东西都转移到了标记,但是如果我错过某个地方很难找到错误,因为“文字中的字符太多”错误。有什么区别,什么是这样做的好方法是什么?

2 个答案:

答案 0 :(得分:1)

其中一个不同之处在于ViewState用法:

假设您的.GetUserProfilePermalink()是一项代价高昂的操作,使用第一种方法,您必须在每次回发时运行它。

使用第二种方法和活动视图状态,您将只能运行.GetUserProfilePermalink()一次,并且该值将存储在视图状态中(虽然以带宽为代价)并显示在每个回发上。

此外,在项目编译期间不会检查标记中的代码。从长远来看,这是代码重构的一个问题。

答案 1 :(得分:0)

使用第二种方法,您将在服务器上创建一个Hyperlink对象,在其上设置一些属性,然后当页面处于Rendering状态时,它将使用该对象以HTML格式呈现超链接。

使用第一种方法,您只需使用Response对象发出字符串,服务器上就没有创建超链接对象。

即使第一种方法通常更轻,第二种方法也有很多优点。例如,因为服务器上有一个渲染自身的对象,它可以知道它当前正在将它自己渲染到哪个浏览器,并为不同的浏览器使用不同的渲染技术,因此它可以在任何地方使用。