关于错误: 服务器标记不能包含 <% ... %> 构造。

 

代码:

<tr>

<td class="header_label">
密码:
</td>
<td>
<input runat="server" type="password" name="Password" id="Password" class="easyui-validatebox textbox" data-options="required:true,validType:'length[1,50]',err:err"/>
</td>
</tr>
<tr>
<td class="header_label">
密码确认:
</td>
<td> 
<input runat="server" type="password" name="RePassword" id="RePassword" validType="equals['#<%=Password.ClientID%>']" class="easyui-validatebox textbox" data-options="required:true,err:err"/>

</td>
</tr>

  

 

这样的代码会报:服务器标记不能包含 <% ... %> 构造。

解决方法:

1.把runat标记去掉(服务器控件不能用<%=%>这种方式)

2.定义全局变量 var PasswordClientID=Password.ClientID,然后绑定到服务器控件validType="equals['<%#PasswordClientID%>']"

3.如下,也就是后台给控件加个属性,但下面的写法要注意,服务端代码要放在控件前面,为什么呢?我的理解是:服务器从上往下将代码翻译成html输出到

Response输出流中,如果给控件赋值,或属性赋值的代码在后面,控件将先被翻译成html输出到流中,但这是输出的内容是没有给属性赋值的。之后运行到服务端代码的时候,虽然给属性赋值是成功的,但没有输入到Response输出流中,所以客户端看不到

<td>
<%
RePassword.Attributes.Add("validType", string.Format("equals['#{0}']",Password.ClientID));
%>
<input runat="server" type="password" name="RePassword" id="RePassword"  class="easyui-validatebox textbox" data-options="required:true,err:err"/>

</td>

 

posted @ 2016-06-20 00:03  hello_stone  阅读(266)  评论(0)    收藏  举报