为什么我的Xaml控件给了我一个多个CodeBehind异常?

时间:2013-04-17 18:12:34

标签: .net xaml sitecore

我在我的Sitecore实例中添加了一个Xaml控件,并且由于某种原因它返回了Only one <CodeBeside> tag is allowed on each page异常。问题是应用程序中只有一个CodeBeside标记(见下文)。我甚至试图删除一个CodeBeside标签,我仍然有同样的问题。我该如何解决这个问题?

<control xmlns:def="Definition"
         xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense">
  <doThingy>
    <FormDialog Icon="Business/32x32/messages.png"
                Header="Thingy-doer"
                Text="Double-click each comment to edit or delete."
                OKButton="Close"
                CancelButton="false">
      <CodeBeside Type="Name.space.layout.layouts.Xaml.Dothingy.CommentsDisplayCodeBeside,CHLIHB.Web" />
      <div>Showing comments from between these dates:</div>
      <div style="outer-datepicker">
        <DatePicker ID="DateLowerBound"
                    Width="50%" />
        <DatePicker ID="DateUpperBound"
                    Width="50%" />
        <div style="clear:both" />
      </div>
      <div>
        <Scrollbox>
          <Listview ID="ThingyListItems"
                    View="Details"
                    Width="100%"
                    Background="white"
                    DblClick="nm:doubleclick"
                    Click="nm:headerclick">
            <ListviewHeader id="IndexHeader">
              <ListviewHeaderItem Name="userName"
                                  Header="User Name" />
              <ListviewHeaderItem Name="datePosted"
                                  Header="Date Posted" />
              <ListviewHeaderItem Name="contentTitle"
                                  Header="Article Title" />
              <ListviewHeaderItem Name="commentExcerpt"
                                  Header="Excerpt" />
            </ListviewHeader>
          </Listview>
        </Scrollbox>
      </div>
    </FormDialog>
  </doThingy>
</control>

1 个答案:

答案 0 :(得分:1)

最可能的原因是两倍。

  • 您已在项目中移动了控件
  • 您的web.config中可能没有足够的controlSources节点,而是找到旧版本的Xaml控件。似乎有时Sitecore将忽略找到的第二个控件,有时它会尝试解析两者(因此异常)。

请记住,无法保证Visual Studio将清除移动源后遗留下来的Xaml文件。这意味着一般来说,这是一个糟糕的政策,应该避免:

<source mode="on" namespace="Sitecore.Web.UI.XmlControls" 
        folder="/layout" deep="true" />

而是确保您指向特定文件夹,并且(理想情况下)具有deep="false"

<source mode="on" namespace="Sitecore.Web.UI.XmlControls" 
        folder="/layout/layouts/Xaml/Dothingy" deep="false" />

这可能意味着包含更多source个节点,但它实际上会带来更多稳定性。