2010-02-19 2 views
3

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

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

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

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

функция Add (ListBox) { ...
// пропуск инициализации код для berevity

вар url = "/ Edit/AddCommand /" + cmd;

$ .post (url);

}

Таким образом, проблема возникает, когда 'CMD' это элемент, который имеет '/', ':', '%', и т.д. (какой-то особый характер) "?

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

Так, например, если элемент, который они добавляют, это «Кошки/Собаки», я отправляю «Кошки [SLASH] Dogs» на контроллер, а в контроллере меняют его на «Кошки/Собаки».

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

ответ

4

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

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

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

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

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

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

+0

Yay это сработало. Большое спасибо, я даже не знал, что это решение существует. Просто делает MVC намного более плохим. Спасибо за совет! – Darcy

0

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

Javascript encoding

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

Это будет выглядеть такой

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

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

$.post(url); 

} 
3

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

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

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

$.post(url); 

} 
+0

Обратите внимание, что на стороне сервера эти URLEncodings автоматически декодируются для вас фреймворком. – Paddy

+0

escape() не кодирует '/'. Я пробовал использовать encodeURIComponent (cmd), который кодирует почти все специальные символы. Когда я использую либо, мой контроллер не вызывается. – Darcy

0

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

0

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

public virtual ActionResult AddCommand(string id) 

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

public virtual ActionResult AddCommand(string cmd) 

, а затем в вас яваскрипте вызова:

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

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

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

Смежные вопросы