1753651760
2025-07-21 19:25:00
デフォルトでは、 最適化フォーム ブラウザCookieを使用して送信を追跡し、同じユーザーがフォームを再度送信する場合、既存の提出物を更新します。この動作はほとんどのシナリオでうまく機能しますが、 カスタムビジネス要件:特定のフォームの場合、 各提出物は新しいエントリとして扱われる必要がありました、同じユーザーセッションまたはブラウザセッションから来たかどうかに関係なく。同時に、ソリューション内の他のすべての形態は、 デフォルトのCookieベースの動作。
当初、これは複雑に思えました、しかし、Optimizely Forms Frameworkを検査した後、 ProgressiveSubmitInFoService 以下に示すように、この動作を清潔で保守可能な方法で注入するためにクラスを活用できます。
using EPiServer.Forms.Core.Internal;
using EPiServer.Forms.Core.Models.Internal;
namespace alloy_example.Customization.Forms;
public class ExtendedProgressiveSubmitInfoService : ProgressiveSubmitInfoService
{
public override ProgressiveSubmitInfo GetProgressiveSubmitInfo(Guid formContentGuid, HttpContext httpContext,
string formLanguage)
{
//var isPathFound = httpContext.Request.Path.StartsWithSegments(RootPath); // e.g. can be checked based on httpContext
if (!string.IsNullOrEmpty(httpContext.Request.Form["TestElement"]))
{
return null;
}
return base.GetProgressiveSubmitInfo(formContentGuid, httpContext, formLanguage);
}
}
上記のコードチェック要素の場合 テスト 提出後にhttpContextの下にありますが、これは単にnullを返し、最適化フレームワークを強制して、指定されたフォーム送信の新しい提出物を生成します。
最後のステップとして、以下のようにDIコンテナに登録してください。
using EPiServer.Forms.Core.Internal;
services.AddSingleton();
これにより、デフォルトのサービスがオーバーライドされ、フレームワークのコア動作をそのまま維持しながら、カスタムロジックが可能になります。
それは誰かを助けることを願っています!
2025年7月21日
#すべての投稿で新しい提出物を強制します