SiteFinity 4.0: проблема с доступом к данным обратной передачи в пользовательском элементе управления - PullRequest
1 голос
/ 04 февраля 2011

Я пытаюсь получить полностью настроенную вручную встроенную форму в 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;
            }
        }
    }
}

Опять же, если я добавлю элемент управления с помощью метода, описанного по ссылке выше, я смогу успешно создать страницу CMS Sitefinity 4.0, перетащить элемент управления на нее, запустить страницу, перейти в код позади с помощью отладчика, нокогда VS2010 достигает строки ниже, данные формы не публикуются:

Literal1.Text = TextBox1.Text;

FYI: причина, по которой в моем коде usercontrol.ascx нет тега формывыше, потому что я получаю сообщение об ошибке при запуске формы через sitefinity, что на странице .net может существовать только один серверный тег формы (sitefinity внедряет свой собственный тег формы).

Заранее спасибо за вашу помощь!

Бен

Ответы [ 3 ]

1 голос
/ 05 февраля 2011

Неважно - я понял это.По какой-то причине данные недоступны на этапе Page_Load жизненного цикла страницы .net при отправке формы sitefinity (по крайней мере, через пользовательский элемент управления).Если я подожду до этапа Page_PreRender, чтобы получить данные из формы на странице, это все там.

Моя текущая преобладающая теория заключается в том, что Sitefinity 4.0 захватывает данные обратной передачи, когда форма отправляется и еще не закончила манипулировать ею на этапе Page_Load, поэтому вам придется подождать до этапа Page_PreRender, чтобы sitefinity ввеладанные обратно в цикл страницы.

0 голосов
/ 31 января 2012

Попробуйте добавить 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);
}

`

0 голосов
/ 09 февраля 2011

У меня была та же проблема, что и у вас, и я пришел к тому же решению. Потратил кучу времени на это - жаль, что этот ответ не был тогда.

...