2011-02-04 14 views
1

我试图获得一个高度定制的手工构建到sitefinity 4.0中的表单,而我的问题是无论我做什么我都无法访问表单的回传数据后面的代码。我的形式是用户控制和我在这里所描述的方式添加它: http://www.sitefinity.com/40/help/developer-manual/controls-adding-a-new-control.htmlSiteFinity 4.0:在自定义用户控件中访问回传数据时遇到问题

挣扎了几个小时后,我创建了一个基本的测试形式,我仍然无法访问回发数据。我也尝试在整个地方添加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页面,将控件拖到它上面,运行页面,使用调试器进入代码后面,然后当VS 2010达到下面的行没有任何表单数据张贴:

Literal1.Text = TextBox1.Text;

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

在此先感谢您的帮助!

回答

1

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

我目前流行的理论是,当表单提交并且在Page_Load阶段尚未完成表单填写时,Sitefinity 4.0会捕获回发数据,因此您必须等到sitefinity注入数据之前的Page_PreRender阶段进入页面循环。

0

我有同样的问题,你做了同样的解决方案。花了一大堆时间 - 希望这个答案是在那个时候。

0

尝试将enableviewstate添加到主页中。我有同样的情况,并解决了这一点。 同时在创建页面时勾选了“启用视图状态”。

希望得到这个帮助。

`<%@ Master Language =“C#”AutoEventWireup =“true”CodeFile =“HomePageClubManavgat.master。CS”继承= “App_Master_HomePageClubManavgat” 的EnableViewState = “真” %>

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

`

相关问题