Отсутствует Intellisense при декларативном описании свойств пользовательского элемента управления - PullRequest
4 голосов
/ 22 мая 2010

Итак, я работаю над этим проектом уже несколько дней и не могу решить проблему получения поддержки intellisense для моих пользовательских внутренних свойств для пользовательского элемента управления (обратите внимание, ascx).

Я видел решение этой проблемы (используя элементы управления сервером, обратите внимание .cs) много раз. Очень хорошо изложено в этой статье . У меня все работает при использовании ascx, кроме intellisense.

Вот схема моего кода:

[PersistChildren(true)]
[ParseChildren(typeof(BreadCrumbItem))]
[ControlBuilder(typeof(BreadCrumbItem))]
public partial class styledcontrols_buttons_BreadCrumb : System.Web.UI.UserControl
{
    ...

    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public List<BreadCrumbItem> BreadCrumbItems
    {
        get { return _breadCrumbItems; }
        set { _breadCrumbItems = value; }
    }

    ...

    protected override void AddParsedSubObject(object obj)
    {
            base.AddParsedSubObject(obj);
            if (obj is BreadCrumbItem)
                    BreadCrumbItems.Add(obj as BreadCrumbItem);
    }

    ...

    public class BreadCrumbItem : ControlBuilder
    {
        public string Text { get; set; }
        public string NavigateURL { get; set; }

        public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs)
        {
            if (String.Compare(tagName, "BreadCrumbItem", true) == 0)
            {
                return typeof(BreadCrumbItem);
            }
            return null;
        }
    }
}

Вот моя разметка (которая отлично работает, просто нет смысла в объявлениях дочерних объектов):

<%@ Register src="../styledcontrols/buttons/BreadCrumb.ascx" tagname="BreadCrumb" tagprefix="uc1" %>

    ...

<uc1:BreadCrumb ID="BreadCrumb1" runat="server" BreadCrumbTitleText="Current Page">
    <BreadCrumbItem Text="Home Page" NavigateURL="~/test/breadcrumbtest.aspx?iwentsomewhere=1" />
    <BreadCrumbItem Text="Secondary Page" NavigateURL="~/test/breadcrumbtest.aspx?iwentsomewhere=1" />
</uc1:BreadCrumb>

Я думаю, что проблема заключается в том, как движок intellisense проходит вспомогательные классы. Все рабочие примеры, которые я вижу, это не ascx, а элементы управления веб-сервером (cs, в скомпилированной сборке).

Если бы кто-нибудь мог пролить свет на то, как этого добиться с помощью средств управления ascx, я был бы признателен.

1 Ответ

0 голосов
/ 22 мая 2010

Я решил эту проблему раньше, удалив все пользовательские элементы управления и директивы со страницы, а затем переключив разметку в режим конструктора.Затем перетащите файл ascx из обозревателя решений в окно дизайна.Если вы вернетесь обратно к разметке, внезапно intelisense подберет все свойства.Я уверен, что есть лучший способ, но я никогда не нашел тот, который работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...