Лучший способ экранировать символы перед постом jquery ASP.NET MVC - PullRequest
3 голосов
/ 19 февраля 2010

Я новичок в ASP.NET MVC.Я создаю приложение, которое используется внутри моей компании.

Сценарий таков: есть два Html.Listbox.Один имеет всю информацию базы данных, а другой изначально пуст.Пользователь будет добавлять элементы из списка базы данных в пустой список.

Каждый раз, когда пользователь добавляет команду, я вызываю функцию js, которая вызывает ActionResult «AddCommand» в моем EditController.В контроллере выбранные элементы, которые добавляются, сохраняются в другой таблице базы данных.

Вот код (вызывается при каждом добавлении элемента):

function Add(listbox) {...
// пропуск инициализирующего кода для berevity

var url = "/ Edit / AddCommand /" + cmd;

$. post (url);

}

Таким образом, проблема возникает, когда «cmd» - это элемент, имеющий «/», «:», «%», «?» И т. Д. (Какой-тоспециального характера)

Так что мне интересно, как лучше всего избежать этих персонажей?Прямо сейчас я проверяю текст элемента списка базы данных и перестраиваю строку, затем в Контроллере я беру эту построенную строку и возвращаю ее в исходное состояние.

Так, например, еслипункт, который они добавляют, это 'Cats / Dogs', я отправляю 'Cats [SLASH] Dogs' на контроллер, а в контроллере меняю его обратно на 'Cats / Dogs'.

Очевидно, это ужасновзломать, так что я должен что-то упустить.Любая помощь будет принята с благодарностью.

Ответы [ 5 ]

4 голосов
/ 19 февраля 2010

Почему бы просто не убрать это из URI? Вы делаете POST, поэтому укажите его в форме.

Если ваше действие:

public ActionResult AddCommand(string cmd) { // ...

... тогда вы можете сделать:

var url = "/Edit/AddCommand";
var data = { cmd: cmd };
$.post(url, data);

... и все будет "просто работать" без отдельного шага кодирования.

3 голосов
/ 19 февраля 2010

Вы пытались использовать функцию «escape» перед отправкой данных? Таким образом, все специальные символы кодируются безопасными символами. На стороне сервера вы можете декодировать значение.

function Add(listbox) { ...
//skipping initializing code for berevity

var url = "/Edit/AddCommand/" + escape(cmd);

$.post(url);

}
0 голосов
/ 19 февраля 2010

Вы можете передать детали в виде строки запроса. На данный момент я предполагаю, что ваше действие выглядит так:

public virtual ActionResult AddCommand( string id )

Вы можете изменить его на:

public virtual ActionResult AddCommand( string cmd )

а потом в тебе вызов javascript:

var url = "/Edit/AddCommand?cmd=" + cmd;

Таким образом, вам не нужно беспокоиться о кодировке.

Лучше было бы передать идентификатор элемента базы данных, а не строку. Это, вероятно, будет лучше для вашей базы данных.

0 голосов
/ 19 февраля 2010

Вы пытались просто обернуть переменную cmd в вызов escape ()?

0 голосов
/ 19 февраля 2010

использовать Javascript Escape, он делает urlencoding.

Javascript кодирование

Тогда в C # вы можете просто декодировать его.такие

function Add(listbox) { ...
//skipping initializing code for berevity

var url = "/Edit/AddCommand/" + escape(cmd);

$.post(url);

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