SiteFinity 4.0: проблема с доступом к данным обратной передачи в пользовательском элементе управления
Я пытаюсь получить полностью настроенную вручную встроенную форму в 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;
К сведению: причина, по которой в моем коде usercontrol.ascx нет тега формы, заключается в том, что при запуске формы через sitefinity возникает ошибка, что на странице.net может существовать только один тег формы на стороне сервера (sitefinity внедряет свою собственную форму тег).
Заранее спасибо за помощь!
Бен
3 ответа
Не берите в голову - я понял это. По какой-то причине данные недоступны на этапе Page_Load жизненного цикла страницы.net при отправке формы sitefinity (по крайней мере, через пользовательский элемент управления). Если я подожду до этапа Page_PreRender, чтобы получить данные из формы на странице, то все будет в порядке.
Моя текущая преобладающая теория заключается в том, что Sitefinity 4.0 получает данные обратной передачи, когда форма отправляется и еще не закончила манипулировать ею на этапе Page_Load, поэтому вам придется подождать до этапа Page_PreRender, прежде чем sitefinity введет данные обратно в цикл страницы.,
У меня была та же проблема, что и у вас, и я пришел к тому же решению. Потратил кучу времени на это - жаль, что этот ответ не был тогда.
Попробуйте добавить 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);
}
`