1

我正在尝试将高度定制的手工构建表单放入 sitefinity 4.0,我的问题是,无论我做什么,我都无法在后面的代码中访问表单的回发数据。我的表单是一个用户控件,我已经按照此处描述的方式添加了它: http ://www.sitefinity.com/40/help/developer-manual/controls-adding-a-new-control.html

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

这是基本表单的代码:

“基本用户控件.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 注入它自己的表单标签)。

在此先感谢您的帮助!

4

3 回答 3

1

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

我目前流行的理论是,Sitefinity 4.0 在提交表单并且在 Page_Load 阶段还没有完成对其进行处理时抓取回发数据,因此您必须等到 Page_PreRender 阶段才能将数据注入到页面周期中.

于 2011-02-04T22:04:55.593 回答
0

我遇到了与您相同的问题并得出了相同的解决方案。花了很多时间 - 希望这个答案当时就在身边。

于 2011-02-08T21:00:30.723 回答
0

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

希望这有帮助。

`<%@ 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);
}

`

于 2012-01-31T09:21:56.373 回答