我有一个最小的网站(基于Visual Studio模板(。
我正在尝试使用表单的 action
属性将我的服务器端窗体发布到不同的 aspx 页。我一直得到臭名昭著的Invalid postback or callback argument
例外。
如果我在 Button 中使用PostBackUrl
属性,我可以让它工作,但为什么我不能将表单提交到具有 action
属性的其他页面?我不想禁用事件验证。
以下是我的Site.Master
.Default.aspx
和Contact.aspx
完全为空(使用母版页除外(。没有一个页面有代码隐藏。
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="LauriTest.SiteMaster" %>
<!DOCTYPE html>
<html lang="en">
<head runat="server">
<title>hello</title>
</head>
<body>
<form id="form1" runat="server" action="Contact.aspx">
<asp:TextBox runat="server"/>
<asp:Button runat="server" />
</form>
</body>
</html>
尝试将EnableEventValidation="false"
添加到 aspx 页(第一行 <%@ Page put-here-the parameter %>
(
第二件事记得输入页面加载方法
if (!Page.IsPostBack){//doOperation}
更新
尝试注册事件验证的控件
protected override void Render(HtmlTextWriter writer)
{
ClientScript.RegisterForEventValidation(YourButtonThatCausesSubmit.UniqueID.ToString());
base.Render(writer);
}
原因
事件验证检查事件的来源是否来自以前加载的一个呈现的控件(而不是某个已确认的控件(。在呈现阶段,可以在回发期间使用 __doPostBack 验证事件。在您的情况下,某些东西破坏了此验证,并且服务器认为回发来自外部对象,可能是某些字符,请在提交表单之前尝试最后一次尝试(重新调整<
和>
var ok= OriginalString.replace("<","<");
ok= ok.replace(">",">");
return ok;
更新2
我从您的代码中看到这是母版页代码。您正在插入表单元素。从母版页继承的页面可能具有另一种形式。如果是,这就是您错误的原因(多个表单(。