我想在文本框中显示用双引号括起来的字符串(例如“ABC”)。目前它没有显示,因为双引号被转义。只有转义双引号才有问题。
E.g。
public const string countryName = "\"ABC\"";
<input id="txtCountryName" type="text" value="<%= countryName %>" />
我想避免使用正则表达式或替换方法来解决这个问题。
C#中是否有任何方法可以解决此问题。
答案 0 :(得分:3)
你必须这样做:
<input id="txtCountryName" type="text" value="<%= Server.HtmlEncode(countryName) %>" />
<强>解释强>
问题是你的最终HTML是这样渲染的:
<input id="txtCountryName" type="text" value=""ABC"" />
您必须致电Server.HtmlEncode
对HTML中的"
进行编码。
答案 1 :(得分:2)
不,实际上,他们没有被转义。
要转义它们,或者将它们编码到HTML实体中,请使用HtmlEncode()
:
<input id="txtCountryName" type="text" value="<%=Server.HtmlEncode(countryName)%>" />
在ASP.NET 4上,您可以使用a different set of delimiters <%: %>
进行自动转义:
<input id="txtCountryName" type="text" value="<%:countryName%>" />
答案 2 :(得分:1)
<input>
不是服务器控件,因此您的示例只执行字符串替换。这产生了
<input id="txtCountryName" type="text" value=""ABC"" />
没有显示你想要的东西。
一个优雅的解决方案是使用服务器控件来使 ASP.NET设置属性而不是仅仅在HTML中进行字符串替换。这样,ASP.NET就会解决逃避问题。
步骤1:使输入控件成为服务器控件。您可以通过添加runat="server"
来实现。
第2步:使用数据绑定语法(<%# ... %>
)。
<input id="txtCountryName" type="text" runat="server" value="<%# countryName %>" />
步骤3:在代码隐藏中执行数据绑定:
public const string countryName = "\"ABC\"";
protected void Page_Load(object sender, EventArgs e)
{
this.DataBind();
}
Voilà,文本框显示"ABC"
。