我的代码如下:
Test.aspx文件:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<input type="text" value="<%=HttpUtility.HtmlEncode(ab)%>" runat="server"/>
</form>
</body>
</html>
test.cs中:
public partial class Test: System.Web.UI.Page
{
public string ab;
protected void Page_Load(object sender, EventArgs e)
{
ab = "<script>alert('111');</script>";
}
}
运行test.aspx页面后,文本框值为<%=HttpUtility.HtmlEncode(ab)%>
但删除runat="server"
字符串显示正确!
答案 0 :(得分:2)
当您在控件上执行runat="server"
时,它将成为服务器控件而不是传统的HTML标记,因此属性将在服务器上处理。不幸的是,这意味着内联脚本标记并不总是按照您希望的方式执行。
你可以做一些事情。要么像你说的那样离开runat="server"
,这样就可以完全按照你想要的方式渲染,或者在代码中设置值:
myTextBox.Value = "whatever";
你也可以使用数据绑定,但它有点难看:
<input id="myTextBox" runat="server" type="text"
value='<%# HttpUtility.HtmlEncode("someString") %>' />
protected void Page_Load(object sender, EventArgs e) {
myTextBox.DataBind();
}