Asp.net mvc 4 使按钮文本A/B可测试-Sitecore MVC

Asp.net mvc 4 使按钮文本A/B可测试-Sitecore MVC,asp.net-mvc-4,sitecore,Asp.net Mvc 4,Sitecore,我有一个带有按钮的MVC/angularJS页面,该按钮需要调用代码来处理当前页面并继续应用程序中的下一步,但他们希望按钮文本可以通过不同的变体进行a/b测试。我是Sitecore的新手,所以我很难知道最好的做事方式 我曾想过使用一个简单的文本组件/模板,它只有一行文本属性,但如果我将其添加到页面模板中,那么它似乎不可测试,因为当您单击测试选项时,它会要求您选择内容。而内容是他们作为页面模板的一部分输入的文本 我知道的唯一方法是制作a/b可测试内容,以便他们可以在页面编辑器中单击页面并选择选择内

我有一个带有按钮的MVC/angularJS页面,该按钮需要调用代码来处理当前页面并继续应用程序中的下一步,但他们希望按钮文本可以通过不同的变体进行a/b测试。我是Sitecore的新手,所以我很难知道最好的做事方式

我曾想过使用一个简单的文本组件/模板,它只有一行文本属性,但如果我将其添加到页面模板中,那么它似乎不可测试,因为当您单击测试选项时,它会要求您选择内容。而内容是他们作为页面模板的一部分输入的文本


我知道的唯一方法是制作a/b可测试内容,以便他们可以在页面编辑器中单击页面并选择选择内容/添加测试变体。我不会将按钮添加到占位符中,因为它需要调用特定的角度代码并始终在那里,但是我应该在文本所在的位置添加占位符吗?在那里定义占位符、定义渲染、创建局部视图、定义占位符设置以将其限制为简单的文本组件,然后希望他们不要尝试向占位符添加多个项目,这似乎有些过分。

我会制作一个单独的模板(即为按钮添加文本字段)来表示表单,然后创建两个测试变体项作为页面的子项,或者将它们放在“主”节点外的共享组件文件夹中

编辑

为了将表单组件移动到新的a/B可测试组件中,您需要在Sitecore中创建新的子布局,然后为子布局创建新的ascx控件。在该控件的Page_Load处理程序中,您将使用以下代码检索子布局的数据源:

//assume you have a button on your usercontrol called btnSubmit
//assume your template has a single-line text field called 'SubmitButtonText'
Guid dataSourceId;
Sitecore.Data.Items.Item dataSource;
if (Guid.TryParse(sublayout.DataSource, out dataSourceId))
{
  dataSource = Sitecore.Context.Database.GetItem(new ID(dataSourceId));
  btnSubmit.Text = dataSource["SubmitButtonText"]; 
}

因此,我创建了一个新模板,其中只有一行文本作为字段,并在共享数据节点中添加了一个内容项

在我看来:

@model Digital.Models.SimpleTextItem
<button ....>
<span class="hidden-xs">@Model.SimpleText_Value<br></span>
</button>

不确定这是否是最好的方法,但它实现了我需要的功能。

A/B测试只能应用于控件(XSLT渲染、子布局、动作控制器渲染、视图渲染)。若您只想对按钮进行A/B测试,那个么您应该像以前一样为它创建额外的控件


MVC的技术细节:A/B测试应用于处理渲染参数的MVC.CustomizerEntering管道。此管道在渲染级别上运行。这意味着您无法在没有自定义的情况下为特定字段(按钮)创建A/B测试。

我不知道如何链接我的主页和按钮文本组件。我将文本的内容存储在共享数据节点中。但是如何实现按钮文本,使其基于可选择的内容?ThanksHi@jen请参阅我上面的编辑,了解有关获取子布局上的数据源集的详细信息。谢谢,我本应该提到我使用的是MVC,但我成功地使其与渲染和类型化模型一起工作。它对页面编辑器不友好,但我认为这是因为它位于一个按钮内。对不起,我以前没有注意到问题中的MVC标记。顺便说一句,您的方法似乎合理-我可能会给您的占位符一个不太具体的名称(例如“SubmitButton”或“SubmitButtonPocholder”),但这样您可以在其他地方重复使用相同的占位符名称。
@Html.Sitecore().Placeholder("PremiumQuoteApplyNowPlaceHolder")