2010-05-21 7 views
3

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

Я видел решение этого (используя серверные элементы управления, .cs mind you) много раз. Хорошо сказано в этом article. Все работает для меня при использовании элементов управления 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; 
     } 
    } 
} 

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

<%@ 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, я был бы признателен.

ответ

0

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

+0

К сожалению, это не сработало для внутренних свойств элемента управления. Просто разъяснение, я получаю intellisense в встроенных свойствах, таких как «BreadCrumbTitleText», но не получая intellisense во внутренних свойствах, таких как «BreadCrumbItem». –

Смежные вопросы