为什么我不能使用服务器表单进行跨页发布

本文关键字:表单 不能 服务器 为什么 | 更新日期: 2023-09-27 18:34:44

我有一个最小的网站(基于Visual Studio模板(。

我正在尝试使用表单的 action 属性将我的服务器端窗体发布到不同的 aspx 页。我一直得到臭名昭著的Invalid postback or callback argument例外。

如果我在 Button 中使用PostBackUrl属性,我可以让它工作,但为什么我不能将表单提交到具有 action 属性的其他页面?我不想禁用事件验证。

以下是我的Site.Master.Default.aspxContact.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("<","&lt;");
ok= ok.replace(">","&gt;");
return ok;

更新2

我从您的代码中看到这是母版页代码。您正在插入表单元素。从母版页继承的页面可能具有另一种形式。如果是,这就是您错误的原因(多个表单(。