HTML. BeginForm теряет routeValues с FormMethod. ДОБРАТЬСЯ

C++ редко использует “generics” терминологию. Вместо этого слово “templates” используется и более точно. Templates описывает один техника для достижения универсального дизайна.

C++ обрабатывает по шаблону, очень отличается от того, что и C# и Java реализуют по двум главным причинам. Первая причина состоит в том, что шаблоны C++ не только позволяют аргументы типа времени компиляции, но также и аргументы значения константы времени компиляции: шаблоны могут быть даны как подписи четной функции или целые числа. Это означает, что можно сделать некоторый довольно броский материал во время компиляции, например, вычисления:

template 
struct product {
    static unsigned int const VALUE = N * product::VALUE;
};

template <>
struct product<1> {
    static unsigned int const VALUE = 1;
};

// Usage:
unsigned int const p5 = product<5>::VALUE;

Этот код также использует другую выдающуюся функцию шаблонов C++, а именно, обработайте специализацию по шаблону. Код определяет один шаблон класса, product, который имеет один аргумент значения. Это также определяет специализацию для того шаблона, который используется каждый раз, когда аргумент оценивает к 1. Это позволяет мне определять рекурсию по шаблонным определениям. Я полагаю, что это было сначала обнаружено Andrei Alexandrescu .

Шаблонная специализация важна для C++, потому что это допускает структурные различия в структурах данных. Templates в целом является средством объединения интерфейса через типы. Однако, хотя это желательно, все типы нельзя рассматривать одинаково в реализации. Шаблоны C++ принимают это во внимание. Это - почти такое же значение, которое ООП имеет между интерфейсом и реализацией с переопределением виртуальных методов.

шаблоны C++ важны для его алгоритмической парадигмы программирования. Например, почти все алгоритмы для контейнеров определяются как функции, которые принимают контейнерный тип как шаблонный тип и рассматривают их однородно. На самом деле это не совсем правильно: C++ не работает над контейнерами, а скорее над диапазоны , которые определяются двумя итераторами, указывая на начало и позади конца контейнера. Таким образом целое содержание ограничено итераторами: начните < = элементы < конец.

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

Другим отличительным признаком C++ является возможность частичная специализация для шаблонов классов. Это несколько связано с сопоставлением с образцом на аргументах в Haskell и других функциональных языках. Например, давайте рассмотрим класс, который хранит элементы:

template 
class Store { … }; // (1)

Это работает на любой тип элемента. Но скажем, что мы можем сохранить указатели больше effciently, чем другие типы путем применения некоторого специального приема. Мы можем сделать это частично специализация для всех типов указателей:

template 
class Store { … }; // (2)

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

Store x; // Uses (1)
Store y; // Uses (2)
Store z; // Uses (2), with T = string*.

7
задан Alexander Prokofyev 28 May 2009 в 11:14
поделиться

1 ответ

Как вы можете видеть, что сгенерированный HTML "правильный", Браузер в этом случае удаляет часть запроса из URL-адреса действия, хотя вы ожидали, что вместо этого она будет добавлена ​​к запросу. Если вы читаете спецификацию, действие не должно содержать запроса (это URI, а не URL-адрес), поэтому на самом деле вы попадаете в «ограничение» спецификации HTTP.

Вы перенаправляетесь на пустой URL-адрес. без запроса, потому что в HTML вам нечего отправлять. Попробуйте указать имя и значение в поле отправки или добавьте скрытое поле, вы увидите, что параметры передаются в запросе.

В этом случае вам обязательно следует использовать скрытые поля.

7
ответ дан 7 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

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