【问题标题】:html encoding on postback issue回发问题的html编码
【发布时间】:2014-10-14 01:13:01
【问题描述】:

当我尝试将数据从 asp 文本框发布到数据库时出现错误。原因是由于使用了html文本编辑器,文本是html。

但是,当我尝试对 html 进行编码时,我收到以下错误:BC30451: 'Bind' is not declared。由于其保护级别,它可能无法访问。

下面是导致错误的文本框的 asp 代码。

<asp:TextBox ID="TxtBx" runat="server" Text='<%# Server.HtmlEncode(Bind("Details").ToString())%>'/>

我确定这是小问题,但无法解决。我也尝试了以下相同的结果:

Text='<%# System.Web.HttpUtility.HtmlEncode(Bind("Details"))%>'

我也尝试在后端创建自己的函数来解决这个问题,使用以下 asp 和 vb:

Text='<%# encodeIT(Eval("Details"))%>'

    Public Function encodeIT(Details As String) As String
    Return HttpUtility.HtmlEncode(Details)
End Function

任何帮助将不胜感激。

更新 1

我尝试了一个客户端解决方案,但似乎仍然无法正常工作,不确定我是否遗漏了什么,我正在一个基本的 Web 项目中进行测试以避免任何可能出现的兼容性问题。出于此测试的目的,我已经删除了数据绑定,因为无论如何 ASP 都会抛出相同的错误。

ASP

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<script src="../Scripts/tinymce/tinymce.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        tinymce.init({
            menubar: false,
            width: 800,
            height: 250,
            selector: "textarea"
        });
        var decodeStuff = (function () {
            // preventing any overhead from creating more than one instance of the function
            var element = document.createElement('div');

            function decodeHtml(str) {
                if (str && typeof str === 'string') {
                    // strip script and html tags
                    str = str.replace(/<script>[^>]*>([\S\s]*?)<\/script>/gmi, '');
                    str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
                    element.innerHTML = str;
                    str = element.textContent;
                    element.textContent = '';
                }
                return str;
            }
            return decodeStuff;
        });
        var text = decodeStuff('TxtBx');
    });
</script>
<asp:Panel runat="server" ID="panel1">
<table>
<tr>
    <td>
        <asp:TextBox ID="TxtBx" runat="server" Width="100%" TextMode="MultiLine" Rows="20"></asp:TextBox>
    </td>
</tr>

我试图在回发时调用函数的代码隐藏 (VB)。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If DDL.Text <> "Select" Then
        TxtBx.Text = DDL.Text``
    End If
    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "TxtBx", "decodeHtml();", True)
End Sub

【问题讨论】:

  • 在发回之前在客户端对文本进行编码。
  • 感谢@YuriyGalanter 认为这绝对是正确的课程,因为它在回发之前就遇到了错误,我找到了一些关于如何实现 html 剥离但无法使其工作的方法。
  • 我以为你想保留 html,只是对其进行编码?如果是这种情况 - 您可以使用如下所示的基本功能:stackoverflow.com/a/1219983/961695
  • 我想要做的是允许将 html 保存到数据库并带回,此时我收到 System.Web.HttpRequestValidationException。
  • 在发回服务器之前使用上述链接中的编码功能。在显示来自服务器的数据之前使用解码功能

标签: javascript asp.net vb.net


【解决方案1】:

如果这仅供内部使用,请进入网络配置文件并在system.web 中找到httpRunTimePages 分别添加属性requestValidationMode="2.0"validateRequest="false"

代码:

<httpRuntime requestValidationMode="2.0"/> <pages validateRequest="false"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多