开发者

SiteFinity 4.0: Trouble Accessing Postback Data in Custom User Control

开发者 https://www.devze.com 2023-02-08 09:39 出处:网络
I\'m trying to get a highly customized hand built form into sitefinity 4.0 and my problem is that no matter what I do I can\'t access the form\'s postback data in the code behind. My form is a user co

I'm trying to get a highly customized hand built form into sitefinity 4.0 and my problem is that no matter what I do I can't access the form's postback data in the code behind. My form is a user control and I've added it in the way described here: http://www.sitefinity.com/40/help/developer-manual/controls-adding-a-new-control.html

After struggling for several hours, I created a basic test form and I'm still not able to access the postback data. I've also tried adding EnableViewState="true" all over the place but the form data is still empty on postback. The exact same user control runs and posts data perfectly outside of sitefinity. I also tried other methods of accessing the postback data and I discovered that Request.Form does contain the data I need. I'd still love to access my form elements in the usual way though, so I don't have to do Request.Form for every control on the page and loop that way, which seems really hokey.

Here's the code for the basic form:

"BasicUserControl.ascx"

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="BasicUserControl.ascx.cs" Inherits="SitefinityWebApp.UserControls.Assessments.BasicUserCont开发者_JS百科rol" EnableViewState="true" %>
<div id="assessmentDiv" runat="server">
    <asp:TextBox ID="TextBox1" runat="server" clientidmode="Static" enableviewstate="true"></asp:TextBox>
    <asp:Literal ID="Literal1" runat="server" clientidmode="Static" enableviewstate="true"></asp:Literal>
    <asp:Button ID="Button1" runat="server" Text="Button" />
</div>

"BasicUserControl.ascx.cs" Code Behind

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SitefinityWebApp.UserControls.Assessments
{
    public partial class BasicUserControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                Literal1.Text = TextBox1.Text;
            }
        }
    }
}

Again, if I add the control via the method described at the link above, I am able to successfully create a Sitefinity 4.0 CMS page, drag the control onto it, run the page, step into the code behind using the debugger, yet when VS2010 reaches the line below there is no form data being posted:

Literal1.Text = TextBox1.Text;

FYI: The reason why there is no form tag in my usercontrol.ascx code above is because I get an error when running the form thru sitefinity that only one server-side form tag can exist on a .net page (sitefinity injects it's own form tag).

Thanks in advance for your help!

Ben


Never mind - I figured it out. For some reason, data isn't available at the Page_Load stage of the .net page lifecycle in a sitefinity form submission (at least not via a custom user control). If I wait until the Page_PreRender stage to retrieve the data from the form on the page, it's all there.

My current prevailing theory is that Sitefinity 4.0 grabs the postback data when a form submits and hasn't finished monkeying around with it at the Page_Load stage, so you have to wait until the Page_PreRender stage before sitefinity has injected the data back into the page cycle.


I had the same issue you did and came to the same solution. Spent a bunch of time on it - wish this answer had been around then.


Try adding enableviewstate into masterpages. I had the same situation and solved with this. Also checked "enable view state" when creating pages.

Hope this help.

`<%@ Master Language="C#" AutoEventWireup="true" CodeFile="HomePageClubManavgat.master.cs" Inherits="App_Master_HomePageClubManavgat" EnableViewState="true" %>

<script type="text/C#" runat="server">
protected override void OnInit(EventArgs e)
{
    this.Page.EnableViewState = true;
    base.OnInit(e);
}

`

0

精彩评论

暂无评论...
验证码 换一张
取 消