SiteFinity 4.0:无法访问自定义用户控件中的回发数据

时间:2011-02-04 19:41:51

标签: forms postback sitefinity-4

我试图让高度定制的纯手工打造的形式进入sitefinity 4.0和我的问题是,无论我做什么,我不能在代码中访问形式的回传后面的数据。我的表单是一个用户控件,我按照这里描述的方式添加它: http://www.sitefinity.com/40/help/developer-manual/controls-adding-a-new-control.html

经过几个小时的挣扎,我创建了一个基本的测试表单,但我仍然无法访问回发数据。我也试过在整个地方添加EnableViewState =“true”,但表单数据在回发时仍为空。完全相同的用户控件在sitefinity之外运行并完美地发布数据。我还尝试了其他访问回发数据的方法,我发现Request.Form确实包含了我需要的数据。我仍然喜欢以通常的方式访问我的表单元素,所以我不必为页面上的每个控件执行Request.Form并以这种方式循环,这看起来真的很好。

以下是基本表单的代码:

“BasicUserControl.ascx”

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="BasicUserControl.ascx.cs" Inherits="SitefinityWebApp.UserControls.Assessments.BasicUserControl" 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”代码背后

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;
            }
        }
    }
}

同样,如果我通过上面链接中描述的方法添加控件,我可以成功创建Sitefinity 4.0 CMS页面,将控件拖到它上面,运行页面,使用调试器进入后面的代码,但是当VS2010到达下面一行时,没有发布表格数据:

Literal1.Text = TextBox1.Text;

仅供参考:我上面的usercontrol.ascx代码中没有表单标签的原因是因为我在运行表单到sitefinity时遇到错误,在.net页面上只能存在一个服务器端表单标记(sitefinity注入它是自己的表格标签)。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

没关系 - 我弄清楚了。出于某种原因,在sitefinity表单提交中的.net页面生命周期的Page_Load阶段无法获得数据(至少不是通过自定义用户控件)。如果我等到Page_PreRender阶段从页面上的表单中检索数据,它就在那里。

我目前流行的理论是,当一个表单提交并且尚未在Page_Load阶段用它进行整理时,Sitefinity 4.0会抓取回发数据,所以你必须等到sitefinity之前的Page_PreRender阶段将数据重新注入页面循环。

答案 1 :(得分:0)

我遇到了同样的问题并找到了相同的解决方案。花了很多时间 - 希望这个答案已经存在。

答案 2 :(得分:0)

尝试将enableviewstate添加到主页中。我有同样的情况,并解决了这个问题。 在创建页面时也检查“启用视图状态”。

希望得到这个帮助。

`&lt;%@ Master Language =“C#”AutoEventWireup =“true”CodeFile =“HomePageClubManavgat.master.cs”Inherits =“App_Master_HomePageClubManavgat”EnableViewState =“true”%&gt;

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

`