【问题标题】:How do I pass in postback argument from JS to VB?如何将回传参数从 JS 传递到 VB?
【发布时间】:2018-06-25 10:42:35
【问题描述】:

我正在尝试将图像从图像编辑器传递到 VB 中的函数。我的设置如下:

JS

var canvas = document.getElementById("canvas_minipaint");
var img = canvas.toDataURL("image/jpeg");
__doPostBack('SaveImage', img);

ASPX

<asp:LinkButton ID="SaveImage" runat="server" Visible="true"></asp:LinkButton>

VB

Private Sub SaveImage_Click(sender As Object, e As EventArgs) Handles SaveImage.Click
    Call GetSession()
End Sub

当我现在单击 SaveImage 按钮时,我收到以下错误:

回发或回调参数无效。使用配置或页面中的 启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。

如何为验证器的按钮注册 onClick?还是我错过了什么?

【问题讨论】:

    标签: javascript jquery asp.net vb.net


    【解决方案1】:

    我建议不要禁用 EventValidation 以避免恶意用户弄乱表单。您可以将数据存储在隐藏的输入中或覆盖页面事件并进行处理。

    protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
    {
        if (sourceControl is yourControl)
            {
                //sanitize data
            }
    }
    

    【讨论】:

      【解决方案2】:

      关闭此页面的事件验证。您可以通过添加

      在页面级别将其关闭
      Page EnableEventValidation="false"
      

      到您的 .aspx 页面的顶部。我建议在这种情况下这样做,因为您正在使用 JavaScript 进行手动回发。无法为单个控件关闭它。

      编辑:

      您始终可以将图像的值存储在隐藏字段中,这样就无需禁用事件验证。您需要一种在现场存储图像数据(可能是 base64 字符串?)的方法,但它会起作用。

      【讨论】:

      • 没问题,很高兴我能帮上忙。
      • 您的编辑让我想起了一个解决方法,我必须处理臭名昭著的 Telerik asp.net 控件的错误。已发布有关如何避免该错误同时保持事件验证的答案。编辑:我认为你的答案是最简单的;-)
      • @KyleBrown 如果这个或其他答案可以帮助您解决问题,请将其标记为有帮助,以便未来的用户可以在发布新问题之前找到答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2011-10-26
      相关资源
      最近更新 更多