asp.net usercontrol странное поведение - PullRequest
0 голосов
/ 15 июня 2009

У меня есть пользовательский контроль, который я пытаюсь использовать в проекте.

Если я сделаю это так (см. Карту сайта в элементе управления)

<%@ Register TagPrefix="OS" Namespace="OS_Layouts" Assembly="OSControlLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0831306e55dc1c27" %>

<html><body>
<OS:OSmenu runat="server" ID="men1" SiteMap="siteMapDataSource1"  />
  <asp:SiteMapDataSource ShowStartingNode="false" SiteMapProvider="CombinedNavSiteMapProvider"
    ID="siteMapDataSource1" runat="server" />
</body </html>

Я получаю странную ошибку.

Сообщение об ошибке синтаксического анализатора: невозможно создать объект типа «System.Web.UI.WebControls.SiteMapDataSource» из его строкового представления «siteMapDataSource1» для свойства «SiteMap».

Если я это сделаю, все будет хорошо. (добавить карту сайта в коде во время загрузки страницы)

<%@ Register TagPrefix="OS" Namespace="OS_Layouts" Assembly="OSControlLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0831306e55dc1c27" %>
<script runat=server>

protected void Page_Load(object sender, EventArgs e)
  {
   men1.SiteMap = siteMapDataSource1;           
  }
</script>
<html><body>
<OS:OSmenu runat="server" ID="men1"  />
  <asp:SiteMapDataSource ShowStartingNode="false" siteMapProvider="CombinedNavSiteMapProvider" ID="siteMapDataSource1" runat="server" />
</body> </html>

Единственная «умная» вещь, которую я делаю, - это использование «aspnet_compiler» и «aspnet_merge» для создания .dll, содержащей мои пользовательские элементы управления, в одну dll, которую я могу использовать в других проектах.

Я что-то неправильно понял или неправильно настроил?

Спасибо РЕДАКТИРОВАТЬ: некоторая дополнительная информация.

Так что мой aspx.cs выглядит так Я всегда получаю «Fail!»

using System;
using System.Web.UI.WebControls;

public partial class OSmenu : System.Web.UI.UserControl
{  

    public String SiteMapID { get; set; }


    protected void Page_Load(object sender, EventArgs e)
    {

    if (SiteMapID == "") return;
       SiteMapDataSource foo = Page.FindControl(SiteMapID) as SiteMapDataSource;
        if (foo == null)
        {
            Response.Write("</br> fail!");
        }
        else
        {
            Response.Write("/<br> ok!" + foo.UniqueID);
        }
    }



}

Все это немного усложняется тем фактом, что страница хоста для элемента управления является главной страницей sharepoint, и я не могу заставить отладку работать для элемента управления, я могу сделать это для самой мастер-страницы!

1 Ответ

1 голос
/ 15 июня 2009

Попробуйте это в вашем пользовательском контроле:

SiteMapDataSource ds = this.Page.FindControl(this.SiteMap) as SiteMapDataSource;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...