2010-05-05 2 views
16

Каков стандартный способ передачи и обработки массива в HTTP-запросе в .NET? У меня есть решение, но я не знаю, лучший ли это подход.Передача значений массива в HTTP-запросе в .NET

Вот мое решение:

<form action="myhandler.ashx" method="post"> 
    <input type="checkbox" name="user" value="Aaron" /> 
    <input type="checkbox" name="user" value="Bobby" /> 
    <input type="checkbox" name="user" value="Jimmy" /> 
    <input type="checkbox" name="user" value="Kelly" /> 
    <input type="checkbox" name="user" value="Simon" /> 
    <input type="checkbox" name="user" value="TJ" /> 

    <input type="submit" value="Submit" /> 
</form> 

Обработчик ASHX принимает параметр «пользователь» в виде строки с разделителями-запятыми. Вы можете получить значения легко разделив строку:

public void ProcessRequest(HttpContext context) 
    { 
     string[] users = context.Request.Form["user"].Split(','); 
    } 

Итак, у меня уже есть ответ на мой вопрос: присвоить множество значений того же имя параметра, предположите, обработчик ASHX получает его в виде строки с разделителями-запятыми , и разделите строку. Мой вопрос заключается в том, как это обычно делается в .NET.

Какая стандартная практика для этого? Есть ли более простой способ захватить несколько значений, чем предполагать, что значение разделено запятой и вызывает на нем Split()? Является ли это тем, как массивы обычно передаются в .NET или вместо этого используется XML?

Есть ли у кого-нибудь представление о том, подходит ли этот подход?

ответ

32

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

Однако значения фактически равны , а не, отправленные как разделенные запятой строки, они отправляются как отдельные значения с тем же именем. Данные формы из вашего примера будет выглядеть следующим образом:

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ 

Вы можете прочитать значения как массив непосредственно, как это:

string[] users = context.Request.Form.GetValues("user"); 

Если вы используете Form["user"] это сцепить значения для вас, и вы придется разбить их снова. Это просто пустая трата времени, и она также ломается, если какое-либо из значений содержит запятую.

+0

Спасибо, это именно то, что я искал. Итак, .NET Framework достаточно умен, чтобы читать значения параметров HTTP с тем же именем, что и массив, и у меня есть возможность получить его как массив через GetValues ​​() или как строку с разделителями-запятыми посредством индексации. –

+0

Спасибо.Это очень полезно, я получил список usint, что. –

2

Если вы используете флажки или поле для выбора нескольких элементов, то набор значений, разделенных запятыми, - это то, что вы получаете автоматически из html. То, что вы делаете, прекрасно. Если вы создаете массив в javascript каким-то другим способом, вы можете создать строку с разделителями-запятыми и назначить ее скрытому полю и использовать split() на сервере одинаково. XML - это, безусловно, еще один вариант, но мне кажется сложным, если все, что вы хотите сделать, это передать простой массив чисел или коротких строк. (Конечно, если строковые значения, которые вам нужно передать, содержат запятые, это испортит ваш простой план.)

+2

Нет, вы не получаете значения, разделенные запятой, из формы html. Это коллекция 'Request.Form', которая объединяет значения, если вы запрашиваете их как одно значение. – Guffa

+0

Да, вы, конечно, правы. Thanx для уточнения. Я имел в виду, как эти значения обычно доступны в asp.net, и я не объяснял преобразование, которое делает каркас для нас. – Ray

+0

Спасибо за подсказку. –