Как создать свойство пары ключ-значение в пользовательском веб-элементе управления

Я хочу передать список значений пользовательскому веб-элементу управления со страницы.

Что-то вроде этого:

<uc:MyUserControl runat="server" id="MyUserControl">
    <DicProperty>
        <key="1" value="one">
        <key="2" value="two">
               ...
    </DicProperty>  
</uc:MyUserControl>

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


person drazen    schedule 25.03.2013    source источник


Ответы (2)


Вы можете создать общедоступное свойство Dictionary в коде вашего пользовательского элемента управления:

public Dictionary<int, string> NameValuePair { get; set; }

Затем в коде формы, где вы создаете новый пользовательский элемент управления, вы можете заполнить это новое свойство:

Dictionary<int, string> newDictionary = new Dictionary<int, string>();

newDictionary.Add(1, "one");
newDictionary.Add(2, "two");
newDictionary.Add(3, "three");

MyUserControl.NameValuePair = newDictionary;
person McCee    schedule 26.03.2013
comment
В моем случае я не могу получить доступ или изменить код позади, поэтому я должен сделать это с лицевой стороны, как в моем примере. Спасибо. - person drazen; 26.03.2013
comment
Ах. В этом случае вы можете просто использовать серверные теги прямо под вашим элементом управления, чтобы установить значения: <uc:MyUserControl runat="server" id="MyUserControl"></uc:MyUserControl> <% Dictionary<int, string> newDictionary = new Dictionary<int, string>(); newDictionary.Add(1, "one"); ... MyUserControl.NameValuePair = newDictionary; %> Обязательно добавьте <%@ Import Namespace="System.Collections.Specialized" %> вверху страницы для коллекции словарей. То же самое можно сделать для создания общедоступного свойства под вашим контролем. Просто используйте теги сервера. - person McCee; 26.03.2013
comment
Спасибо. Это сработает, но не в моем случае. Мне нужны значения словаря в событии загрузки пользовательского элемента управления, чего нет в вашем примере, где у меня есть значения в событии рендеринга (для меня это слишком поздно). Я опубликовал свое решение, это лучшее, что я мог в этот момент. И это работает :) - person drazen; 26.03.2013
comment
Превосходно. Я рад, что ты понял это. - person McCee; 26.03.2013

Я нашел один вид решения:

public partial class MyUserControl : System.Web.UI.UserControl
{
    private Dictionary<string, string> labels = new Dictionary<string, string>();

    public LabelParam Param
    {
        private get { return null; }
        set
        { 
            labels.Add(value.Key, value.Value); 
        }
    }

    public class LabelParam : WebControl
    {
        public string Key { get; set; }
        public string Value { get; set; }

        public LabelParam() { }
        public LabelParam(string key, string value) { Key = key; Value = value; }
    }
}

И на странице:

<%@ Register src="MyUserControl.ascx" tagname="MyUserControl" tagprefix="test" %>

<test:MyUserControl ID="MyUserControl1" runat="server">
    <Param Key="d1" value="ddd1" />
    <Param Key="d2" value="ddd2" />
    <Param Key="d3" value="ddd3" />
</test:MyUserControl>
person drazen    schedule 26.03.2013