为什么<正在转换为<在运行时

时间:2009-08-05 11:27:09

标签: asp.net javascript

我正在尝试编写一个aspx页面,我将一些服务器端值传递给Javascript。服务器端标记从<%更改为&lt;%

<asp:TextBox
    ID="txtOriginalNo"
    runat="server"
    onkeyup="javascript:EnterKeyPress(<%=ibtnSubmit.ClientID%>,event);"
    TabIndex="1"
    MaxLength="13"
></asp:TextBox> 

这会在运行时转换为:

<input
    name="txtOriginalNo"
    type="text"
    maxlength="13"
    id="txtOriginalNo"
    tabindex="1"
    onkeyup="javascript:EnterKeyPress(&lt;%=ibtnSubmit.ClientID%>,event);"
/> 

谁能告诉我为什么会这样?

3 个答案:

答案 0 :(得分:2)

您不能在服务器控件中使用服务器标记。从后面的代码设置属性:

txtOriginalNo.Attributes["onkeyup"] = "EnterKeyPress(" + ibtnSubmit.ClientID + ",event);"

注意:请勿在事件属性中使用javascript:协议。当您将Javascript代码放入URL时使用它,如果您在事件属性中使用它,它将变为标签。

答案 1 :(得分:0)

您不能在服务器端控件的属性中使用<%= %>。您需要以不同方式分配asp:TextBox的{​​{1}}属性,例如:

onkeyup

答案 2 :(得分:0)

它被转换为保护您免受XSS(跨站点脚本)漏洞的影响。这是件好事。 ASP.NET中的服务器标记属性中不能包含大多数类型的服务器标记。

但是,您可以使用绑定,请参阅此问题528006 (Server tag in OnClientClick)以获取更多信息:

<asp:TextBox onkeyup="<%# CreateKeypressEvent(Eval(ibtnSubmit.ClientID)) %>">
</asp:TextBox>

protected static CreateKeyPressEvent(string source)
{
    return "javascript:EnterKeyPress('" + source + "', event);";
}