如何在输出到html之前停止asp.net编码字符?

时间:2013-10-18 08:40:46

标签: c# javascript html asp.net encoding

我有一个为我生成javascript代码的函数。

<img src="abc.png" alt="hello" onclick="<%: getOnCilckJS(arg)  %>" />

c#c​​ode

protected String getOnCilckJS(int arg)
{
  if (arg==1)
  {
     return "alert('hello world');";
  }
  else
  {  return "alert('hello universe');"; 
  }
}

除了加载页面时,一切正常,asp.net将单引号'转换为编码的html字符串(&#39;

如何避免这种情况并在html中显示'

4 个答案:

答案 0 :(得分:1)

您正在使用<%: %>,其实际值为does encode。您正在寻找<%= %>

另见Diference between special tags asp.net

答案 1 :(得分:1)

您的申请是Web Forms还是MVC?

如果是MVC,您可以尝试使用Html.Raw(...)函数,如果是Web表单,则可以查看link

答案 2 :(得分:1)

在ASP.NET WebForms中,剃刀语法无效,因此在字符串输出中停止字符串编码的方法是使用HtmlString(),例如内联语法为:

<%: new HtmlString(stringVariable) %>

下面是如何在ASP.NET WebForm页面上的JavaScript内联代码中输出变量的示例。代码示例将C#字符串数组输出到JavaScript数组中:

<script type="text/javascript">
    var array = ["<%: new HtmlString(string.Join(@""",""", stringArray)) %>"];
</script>

通常,双引号字符是html编码并转换为&quot;并打破JavaScript语法 - 使用HtmlString()方法停止编码。

但是,如前面的答案所述,为了避免使用HtmlString(),只需使用适当的特殊ASP.Net标记语法输出您的值 - <%: %>对字符进行编码,<%= %>为原始输出! / p>

Review the differences between ASP.Net special tags here

答案 3 :(得分:0)

您的代码对我有用:

  

但只需更改&lt;%:to&lt;%=(我自己发送参数)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="xxxx.aspx.cs" Inherits="SampleAngularApp.xxxx" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>          
        **<img src="abc.png" alt="hello" onclick="<%= getOnCilckJS(11)  %>" />**
    </div>
    </form>
</body>
</html>

服务器端

**protected string getOnCilckJS(int arg)**
        {
            if (arg == 1)
            {
                return "alert('hello world');";
            }
            else
            {
                return "alert('hello universe');";
            }
        }

我收到了没有任何单引号的警告信息