我已经在 Umbraco 论坛和 Umbraco Discord 中发布了这个问题,但没有得到回复,所以我想我也可以在这里尝试 :)
我已经使用内容节点工作流程在后台存储了来自特定表单的不同字段。
那些内容节点是学校课程,我希望用户能够在页面本身的课程之间切换。最好将其绑定到成员,以便他们可以在自己注册的学校班级之间交换。显然,由于某种原因,UmbracoFormsStorage 在最新版本中不再可用。
有人知道如何在 Umbraco 11 的 Razor 视图中执行此操作吗?还是我必须设置控制器并使用服务 API/GUID?
我一直在尝试使用@using Umbraco.Forms.Data.Storage; FormStorage 和 RecordStorage 但它似乎不适用于 Umbraco 11。我还尝试了请求方法和 HttpContextAccessor.HttpContext.Request.Form.ContainsKey("myField"))
但是它们都不起作用。知道如何解决这个问题吗?我很乐意与大家分享一些代码,以便大家了解我要实现的目标。
@inherits UmbracoViewPage<SiteBuilderBaseViewModel>
@using USNSiteBuilder.Core.Models
@using Umbraco.Cms.Core.Security
@using Microsoft.AspNetCore.Http
@using Umbraco.Forms.Core.Models
@using Umbraco.Forms.Core.Services;
@using Newtonsoft.Json.Linq;
@using Umbraco.Forms.Web.Services;
@using Microsoft.AspNetCore.Http.Features;
@using Umbraco.Forms.Data.Storage;
@using Microsoft.AspNetCore.Mvc.Rendering
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
@inject IMemberManager MemberManager
@{
Layout = "USNMaster.cshtml";
Usnstyle websiteStyle = (Usnstyle)Model.WebsiteStyle;
var currentMember = await MemberManager.GetCurrentMemberAsync();
if (currentMember != null)
{
var formId = "umbraco_form_2234732813ed4ada88a0370f2630e351"; // replace with your form ID
var storage = new UmbracoFormsStorage();
var form = storage.GetForm(Guid.Parse(formId));
var registeredClasses = form.AllFieldValues.ContainsKey("registeredClasses")
? form.AllFieldValues["registeredClasses"].ToString()
: "";
var classIds = registeredClasses.Split(',');
var classNodes = new List<IPublishedContent>();
foreach (var classId in classIds)
{
var classNode = Umbraco.Content(classId);
if (classNode != null)
{
classNodes.Add(classNode);
}
}
foreach (var classNode in classNodes)
{
<div>
<h3>@(classNode.Value<string>("klassensNamn"))</h3>
<p>@(classNode.Value<string>("aarskull"))</p>
<p>@(classNode.Value<string>("skolansNamn"))</p>
<p>@(classNode.Value<string>("skolansAdress"))</p>
<p>@(classNode.Value<string>("skolansPostnummer")) @(classNode.Value<string>("skolansPostort"))</p>
<p>@(classNode.Value<string>("antalElever"))</p>
<p>@(classNode.Value<string>("pedagogensNamn"))</p>
</div>
}
}
}