高度にカスタマイズされた手作りのフォームを 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 ページにはサーバー側のフォーム タグが 1 つしか存在できないというエラーが発生するためです (sitefinity は独自のフォームを挿入します)。鬼ごっこ)。
よろしくお願いします。
ベン