2

これは私の最初の SO 投稿です。間違いがあればご容赦ください。このエラーに関連するすべての投稿ですべてを試したように感じます (viewstate を無効にする、noCache など)。

1 つのマスター ページ、1 つのページ、および 1 つのコントロールを持つ空のプロジェクトがあります。

ページ (aspx) は、マスター ページを使用して読み込まれます。これはうまくいきます。コントロール (ascx) を aspx の divRightMainView セクションにロードするページ上のボタンがあります。これも問題なく機能します(これは、私の問題が私が見つけた他のすべての問題とは異なるように見えるところです...)。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 から入力を取得したりできるようにしたいと考えています。これを実現する方法や別の回避策があれば教えてください。どんな助けでも大歓迎です!

4

1 に答える 1

0

ascx のページ読み込み時に ascx を読み込まず、ユーザー コントロール html を手動でレンダリングするのではなく、可視性をオフにします。コントロールが ascx に属しているため、ascx のイベントに接続しないのは非常に奇妙です。しかし、それを aspx に追加してから、必要なときにいつでも可視性を有効にする必要があると思います。

于 2013-01-26T17:52:33.977 に答える