无效的回发或回调参数 - 除按钮外没有服务器控件(DNN模块)

时间:2013-12-20 21:08:47

标签: asp.net jquery file-upload dotnetnuke-7 eventvalidation

我的DNN模块页面只包含一些div和一个LinkBut​​ton。 div的内容使用jQuery AJAX填充。该按钮用于将文件发布到需要上载的服务器。我收到“无效的回发或回调参数”错误。

假设无法关闭事件验证,从我读到的内容到现在,我不应该使用javascript修改页面上任何服务器控件的内容,如果我这样做,那么我必须使用RegisterForEventValidation来注册所有可能的事先回复该控件的数据。我不确定这是否适用于我的情况,因为没有正在修改的服务器控件。当其他内容全部通过AJAX加载时,我的上传文件的方法有问题吗?

<div id="divTop"></div>
<div id="divMain"></div>
<div id="divError" style="display: none" class="ui-widget-content ui-state-error"></div>
<div id="divAddFile"></div>
<div id="divSearchNow" class="ui-widget-header divControl" style="position: absolute; display: none; z-index: 999;"></div>
<asp:LinkButton ID="btnUploadFiles" runat="server" OnClick="btnUploadFiles_Click"
Style="display: none;">Upload Files</asp:LinkButton>

为了使用户能够上传,通过AJAX / javascript渲染html文件控件并使按钮可见。但是,当页面尝试回发时,我收到错误。

我到目前为止看到的大多数示例都提到了通过javascript操作的下拉列表,因此RegisterForEventValidation用于所有动态值。我该如何应用于我的情况?

我也对我在几乎完全通过AJAX呈现的页面上上传文件的方法提出建议。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

这里的主要问题是你不能同时使用Postbacks和AJAX而不会出现很多问题。当服务器发出网页时,它希望在Postback上返回相同的内容。如果它发送了例如空的div,那么你用AJAX填充它们,然后将它发回服务器,服务器将出错。有一些方法可以解决这个问题,但根据我的经验,他们几乎从不一贯地工作。

您需要使应用程序完全面向服务(AJAX)或基于完全页面方法。

面向服务 - 创建一个服务器端控件,允许您使用AJAX函数上传文件。

页面方法 - 需要在服务器端填充div。对客户端内容的任何更改都应使用完整的回发,而不是AJAX。

如果上传时不需要div中的内容,则可以使用更新面板。换句话说,如果您需要在单击按钮时回发div,您仍会得到相同的错误。如果不需要div内容,那么仅将按钮更换为按钮将导致仅返回该按钮点击并消除您的错误。