ASP.NET 4.0 C# “状态信息对此页无效,可能已损坏.” MasterPage->Aspx->Ascx.

本文关键字:已损坏 MasterPage- Ascx Aspx- 无效 NET 状态 信息 ASP | 更新日期: 2023-09-27 17:56:04

这是我的第一篇SO帖子,所以请原谅任何失礼。我觉得好像我已经尝试了与此错误相关的每个帖子(禁用视图状态、noCache 等)的所有内容,并且我已经到了尽头。

我有一个空白项目,其中包含单个母版页、单个页面和单个控件。

使用母版页加载页面 (aspx)。这工作正常。页面上有一个按钮,用于将控件(ascx)加载到名为divRightMainView的部分中的aspx上。这也很好用(这就是我的问题似乎与我发现的所有其他问题不同的地方......ascx 上有一个按钮,它应该调用 ascx 的代码隐藏 - 这是我得到"状态信息"错误的地方。

这是 aspx:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master"                   EnableEventValidation="false" AutoEventWireup="true" CodeBehind="Outer.aspx.cs"   Inherits="TestProject.Outer" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <script  type="text/javascript">
        function loadUserView(viewToLoad) {
            PageMethods.RenderControl(viewToLoad, onSuccess, onError);
        }
        function onSuccess(results) {
            alert(results);
            var command = results.split('##')[0];
            if (command == 'loadView') {
                var htmlToLoad = results.split('##')[1];
                $get('divRightMainContentView').innerHTML = htmlToLoad;
            }
        }
        function onError(error) {
            alert('error ' + error);
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>
     <div id="leftSideContent">
         <input type='button' id="clickToLoadASCX" value="Click Me" onclick="loadUserView('/inner.ascx');"/>
         This is the "Outer.aspx" page which will hold the ascx after the button is clicked
     </div>
     <div id="divRightMainContentView">
     </div>
</asp:Content>

Aspx 代码隐藏(呈现 ascx)

 [WebMethod]
    public static string RenderControl(String controlName)
    {
        Page page = new Page();
        Control control = page.LoadControl(controlName);
        HtmlForm form = new HtmlForm();
        form.Controls.Add(control);
        page.Controls.Add(form);
        StringWriter writer = new StringWriter();
        HttpContext.Current.Server.Execute(page, writer, false);
        return "loadView##" + writer.ToString();
    }

这是名为inner.ascx的ascx。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="inner.ascx.cs" Inherits="TestProject.inner" %>
<div>
    This is the inner text. When I click the button below I should proceed to inner.ascx.cs to the "PageBehindCall_Submit".
    <asp:Button ID="innerButton" runat="server" onclick="PageBehindCall_Submit" Text="Submit"/> 
</div>

最后,ascx 代码隐藏

protected void PageBehindCall_Submit(object sender, EventArgs e)
{
    string str = "This call does not work!";
}

我希望能够使用"PageBehindCall_Submit"来处理数据,从ascx获取输入等。让我知道是否有办法实现这一目标,或者其他可能的解决方法?任何帮助将不胜感激!

ASP.NET 4.0 C# “状态信息对此页无效,可能已损坏.” MasterPage->Aspx->Ascx.

为什么不在 ascx 的页面加载时加载 ascx,而是关闭可见性,而不是手动呈现用户控件 html。这很奇怪,因为它没有与 ascx 中的事件挂钩,因为控件属于 ascx。但我认为您应该将其添加到 aspx 中,然后在需要时尝试打开可见性。