Использование обобщений для обработки переменных запроса формы asp.net в бизнес-объект - PullRequest
0 голосов
/ 03 августа 2009

Использование jquery для отправки значений обратно в веб-форму asp.net. У меня есть некоторый код, который отлично работает для вставки значений формы в мой объект, в основном он преобразует значения формы в правильный тип для каждого свойства в моем классе.

if (Request.Form.HasKeys())
{
    foreach (var key in Request.Form.AllKeys)
    {
        PropertyInfo itemProperty = _CmsItem.GetType().GetProperty(key, BindingFlags.Public | BindingFlags.Instance);

        var value = Request.Form[key];
        if (itemProperty != null)
        {
            itemProperty.SetValue(_CmsItem, Convert.ChangeType(value, itemProperty.PropertyType), null);
        }
    }
    // Doing some processing with my object
}

Теперь я столкнулся с трудностями, связанными с обработкой строки типа MyKeys = 123,13332,232323. и получить это в массив или список в моем объекте. Как лучше всего справиться с этой ситуацией?

Уточнение. Я создал страницу для обработки сообщений обычной формы, а также сообщений обратного вызова $ ajax на основе флага requestmode, чтобы страница / или ее части могли использоваться повторно в зависимости от обстоятельств.

1 Ответ

1 голос
/ 03 августа 2009

Самый простой способ проанализировать список в указанном выше формате - просто использовать string.Split(...).

Идеальный способ обработки списков и объектов из JavaScript на сервере - это использование JSON. Это стандартизировано и интуитивно понятно большинству разработчиков. Он имеет дополнительный бонус, заключающийся в простоте анализа в ASP.NET с помощью общего API.

В приведенном ниже примере я предполагаю, что значение списка буквально равно "[123,13332,232323]" (без кавычек). Это преобразует значение в строковый массив. Он использует JavaScriptSerializer класс для анализа JSON. Этот класс требует, чтобы ваш проект имел ссылку на DLL System.Web.Extensions, которая является частью .NET 3.5 framework, но не всегда включается по умолчанию в проекты.

using System.Web.Script.Serialization;

[...]

if (Request.Form.HasKeys())
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    foreach (var key in Request.Form.AllKeys)
    {
        var value = Request.Form[key];

        var list = serializer.Deserialize<string[]>(value);

    }
}

Я также только что проверил это с другими типами (кроме string[]), и метод Deserialize<T>() также преобразует объекты в int[], List<string> и List<int>, так что это очень динамично не требует больших усилий для разбора.

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