Просто важное примечание: принятый ответ выше не будет корректно работать для keyCode> = 144, то есть периода, запятой, тире и т. д. Для них вы должны использовать более общий алгоритм:
let chrCode = keyCode - 48 * Math.floor(keyCode / 48);
let chr = String.fromCharCode((96 <= keyCode) ? chrCode: keyCode);
Если вам интересно, почему это, по-видимому, необходимо из-за поведения встроенной функции JS String.fromCharCode()
. Для значений keyCode <= 96
он, по-видимому, отображается с помощью функции:
chrCode = keyCode - 48 * Math.floor(keyCode / 48)
Для значений keyCode > 96
, как представляется, карта использует функцию:
chrCode = keyCode
Если это похоже на нечетное поведение, тогда хорошо ... Я согласен. К сожалению, это было бы очень далеко от самой странной вещи, которую я видел в ядре JS.
document.onkeydown = function(e) {
let keyCode = e.keyCode;
let chrCode = keyCode - 48 * Math.floor(keyCode / 48);
let chr = String.fromCharCode((96 <= keyCode) ? chrCode: keyCode);
console.log(chr);
};
<input type="text" placeholder="Focus and Type"/>
Если Вы хотите, чтобы это представило другое действие контроллеров, как компонент, получило инкапсуляцию, Вы используете.
HTML. RenderAction
использование routedata для получения Вас там, имеет его собственные видеоданные и вид мини-жизненного цикла
Используя предварительный просмотр 5, HTML. RenderPartial является Вашим человеком, можно представить подсредства управления и передать их видеоданные, или произвольная модель и новая комбинация видеоданных.
Можно создать ActionFilter, который изменяет данные представления. Тем путем можно украсить каждое действие, которое возвращает частичное с фильтром действия. Смотрите на мое сообщение:
Вы ищете подконтроллеры. Эта реализация является лучшим способом сделать то, о чем Вы говорите.
Править: Я просто отправил об этом здесь: http://mhinze.com/subcontrollers-in-aspnet-mvc/