Передающий международный список в качестве параметра к управлению интернет-пользователя

Прежде чем ответить на вопрос, я хотел бы отметить, что если вы сможете добавить идентификатор для каждого пункта меню, это сделает поиск более простым и более производительным.

В этом сценарии вы можете сделать:

WebElement result = driver.findElement(By.id("myId"));

Если вы не можете добавить идентификатор, вы можете сделать что-то вроде этого:

    WebElement result = driver.findElements(By.className("menu-popup-item-text")).stream()
                .filter(webElement -> webElement.getText().contains("Mr."))
                .findFirst().get();
12
задан Community 23 May 2017 в 11:58
поделиться

8 ответов

После сцепления отладчика в Кассини я вижу, что пустой указатель касательно на самом деле прибывает из Системы. Сеть. Компиляция. CodeDomUtility. GenerateExpressionForValue, который в основном пытается получить выражение для интервала [], выстраивает Вас передача в конструктора Списка. С тех пор нет никакого дескриптора типа для интервала [] массива, он приводит к сбою (и бросает пустой указатель касательно в процессе, вместо "не может генерировать исключение набора свойств", что он должен).

Я не могу выяснить созданный способом получить сериализуемое значение в Список <интервал>, таким образом, я просто использовал статический метод:

class IntListConverter : TypeConverter {
    public static List<int> FromString(string value) {
       return new List<int>(
          value
           .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
           .Select(s => Convert.ToInt32(s))
       );
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
        if (destinationType == typeof(InstanceDescriptor)) {
            List<int> list = (List<int>)value;
            return new InstanceDescriptor(this.GetType().GetMethod("FromString"),
                new object[] { string.Join(",", list.Select(i => i.ToString()).ToArray()) }
            );
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }
}
10
ответ дан 2 December 2019 в 21:46
поделиться

В то время как я не могу сказать, что у меня есть какой-то конкретный опыт с этой ошибкой, другие источники указывают, что необходимо добавить преобразование в тип, который проверяют InstanceDescriptor.:

http://weblogs.asp.net/bleroy/archive/2005/04/28/405013.aspx

Который дает объяснение причин или альтернативно:

http://forums.asp.net/p/1191839/2052438.aspx#2052438

Который обеспечивает пример кода, подобный Вашему.

1
ответ дан 2 December 2019 в 21:46
поделиться

Я решил что-то средство моделирования путем создания 2 свойств:

public List<int> ModuleIDs { get .... set ... }
public string ModuleIDstring { get ... set ... }

ModuleIDstring преобразовывает свой набор значений в список и устанавливает свойство ModuleIDs.

Это также сделает ModuleIDs применимым из PropertyGrid и т.д.

Хорошо, не лучшее, безопасное с точки зрения типов решение, но для меня это работает.

1
ответ дан 2 December 2019 в 21:46
поделиться

передайте список из кода позади...

aspx:

<UC:MyControl id="uc" runat="server" />

код - позади:

List<int> list = new List<int>();
list.add(1);
list.add(2);
list.add(3);

uc.ModuleIds = list;
0
ответ дан 2 December 2019 в 21:46
поделиться

Путем я обычно делаю это должно заставить свойство перенести набор ViewState. Ваш путь выглядит лучше, если это может быть сделано работать, но это сделает задание:

public IList<int> ModuleIds
{
   get
   {
       string moduleIds = Convert.ToString(ViewState["ModuleIds"])

       IList<int> list = new Collection<int>();

       foreach(string moduleId in moduleIds.split(","))
       {
          list.Add(Convert.ToInt32(moduleId));
       }

      return list;
   }
}
0
ответ дан 2 December 2019 в 21:46
поделиться

Я полагаю, что проблемой является набор {}. Конвертер типов хочет измениться List<int> назад в строку, но CanConvertFrom() сбои для List<int>.

0
ответ дан 2 December 2019 в 21:46
поделиться

Можно передать его в строку и разделение на запятой для заполнения частной переменной. Не имеет точности атрибуции, но будет работать.

private List<int> modules;
public string ModuleIds
{
  set{
    if (!string.IsNullOrEmpty(value))
    {
    if (modules == null) modules = new List<int>();
    var ids = value.Split(new []{','});
    if (ids.Length>0)
      foreach (var id in ids)
        modules.Add((int.Parse(id)));
    }
}
0
ответ дан 2 December 2019 в 21:46
поделиться

Я думаю, что Вы - наилучший вариант, должен заставить Ваш usercontrol иметь Свойство стиля источника данных.

Вы берете свойство в качестве объекта и затем делаете некоторую проверку типа по сравнению с IList/IEnumerable/и т.д., чтобы удостовериться, что это корректно.

0
ответ дан 2 December 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: