Asp.net - Пустой параметр QueryString

Примечание: Неопределенный индекс

Случается, когда вы пытаетесь получить доступ к массиву с помощью ключа, который не существует в массиве.

Типичным примером для уведомления Undefined Index будет ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Оба spinach и 1 не существуют в массив, вызывающий запуск E_NOTICE .

Решение состоит в том, чтобы убедиться, что индекс или смещение существуют до доступа к этому индексу. Это может означать, что вам необходимо исправить ошибку в вашей программе, чтобы убедиться, что эти индексы существуют, когда вы ожидаете их. Или это может означать, что вам нужно проверить, существуют ли индексы с помощью array_key_exists или isset :

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

Если у вас есть код например:


...

, тогда $_POST['message'] не будет установлена, когда эта страница будет загружена первой, и вы получите указанную выше ошибку. Только когда форма будет отправлена ​​и этот код будет запущен во второй раз, будет существовать индекс массива. Вы обычно проверяете это с помощью:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Вопросы, относящиеся:

24
задан Community 23 May 2017 в 11:53
поделиться

5 ответов

Вы можете использовать null в качестве ключа для NameValueCollection, и это даст вам разделенный запятыми список имен параметров, которые не имеют значений.

Для http://example.com?bar=3&foo вы должны использовать Request.QueryString[null] и получить foo.

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

Для http://example.com?bar=3&foo&test вы получите foo,test в качестве значения.

Обновление:

Вы можете использовать Request.QueryString.GetValues(null), чтобы получить имена параметров, которые не имеют значений.

43
ответ дан 28 November 2019 в 22:51
поделиться

Request.ServerVariables["QUERY_STRING"] возвратит строку запроса, завершенную, как строка. Тогда ищите его с помощью Regex или IndexOf

8
ответ дан James Curran 28 November 2019 в 22:51
поделиться

Вы становитесь пустыми, потому что foo параметр не имеет значения с ним.

... Какова проблема точно?

, Если Вы все еще хотите проверить на его существование (хотя это испытывает недостаток в значении), попробуйте что-то вроде этого:

bool doesFooExist = Request.Url.AbsoluteUri.IndexOf("foo=") >= 0 ? true : false;
7
ответ дан Andreas Grech 28 November 2019 в 22:51
поделиться

Dreas корректен. Переменная "панель" имеет значение, но нечто не делает.

0
ответ дан Perry Neal 28 November 2019 в 22:51
поделиться

QueryString ["Панель"] возвратится 3, потому что это имеет значение 3 связанных с переменной Панелью. Однако Foo возвратит пустой указатель, потому что их не значение и когда Вы называете QueryString на переменной или ключе, Вы запрашиваете для значения, не ключа, так, чтобы был то, почему Вы возвращаете пустой указатель.

0
ответ дан Xaisoft 28 November 2019 в 22:51
поделиться
Другие вопросы по тегам:

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