2010-02-19 3 views
3

전 ASP.NET MVC에 준결승입니다. 내 회사에서 내부적으로 사용되는 앱을 만들고 있습니다.jquery 게시하기 전에 문자를 이스케이프하는 가장 좋은 방법은 ASP.NET MVC

시나리오는 다음과 같습니다. 두 개의 Html.Listbox가 있습니다. 하나는 모든 데이터베이스 정보를 가지고 있고, 다른 하나는 초기에 비어 있습니다. 사용자는 데이터베이스 목록 상자의 항목을 빈 목록 상자에 추가합니다.

사용자가 명령을 추가 할 때마다 내 EditController에서 ActionResult "AddCommand"를 호출하는 js 함수를 호출합니다. 컨트롤러에서 추가 된 항목이 다른 데이터베이스 테이블에 저장됩니다.

기능 (목록 상자) 추가 { ...
// berevity

에 대한 초기화 코드를 건너 뛰는

VAR : 여기

(이 항목이 추가 될 때마다 호출되는) 코드입니다 url = "/ 편집/AddCommand /"+ cmd;

$ .post (url); ':', '%', 등 (특수 문자의 일종)에 'cmd를'가 '/'를,이 항목 때

}

그래서 문제가 발생합니다 '?'

내가 궁금해하는 점은 이러한 문자를 벗어나는 가장 좋은 방법은 무엇일까요? 지금은 데이터베이스의 목록 상자 항목의 텍스트를 확인하고 문자열을 다시 작성한 다음 컨트롤러에서 문자열을 가져 와서 원래 상태로 되돌릴 것입니다.

예를 들어, 추가하려는 항목이 '고양이/개'인 경우 컨트롤러에 '고양이 [슬래시] 개'를 게시하고 컨트롤러에서 '고양이/개'로 다시 변경합니다.

분명히 이것은 끔찍한 해킹이므로 뭔가를 놓치고 있어야합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

4

URI에서 가져 오지 않는 이유는 무엇입니까? POST을하고 있으므로 양식에 넣으십시오.

액션 인 경우 :

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

...다음을 수행 할 수 있습니다.

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

... "별도의 인코딩 단계없이 모든 것이 올바르게 작동합니다.

+0

예. 작동했습니다. 대단히 고마워, 나는이 해결책이 존재하는지조차 몰랐다. MVC가 훨씬 더 나빠질뿐입니다. 팁 고마워! – Darcy

0

자바 스크립트 이스케이프를 사용하면 urlencoding이 발생합니다. 그런 다음 간단한 디코드 그것을 할 수있는 C#에서

Javascript encoding

.

그것은 당신이 데이터를 전송하기 전에 '탈출'기능을 사용하여 시도 해 봤나 같은

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

서버 측에서 이러한 URL 인코딩은 프레임 워크에서 자동으로 디코딩됩니다. – Paddy

+0

escape()는 '/'를 인코딩하지 않습니다. 거의 모든 특수 문자를 인코딩하는 encodeURIComponent (cmd)를 사용해 보았습니다. 둘 중 하나를 사용할 때 컨트롤러가 호출되지 않습니다. – Darcy

0

esc 변수()에 대한 호출에서 cmd 변수를 래핑하려고 했습니까?

0

세부 정보를 쿼리 문자열로 전달할 수 있습니다. 당신을 다음과

public virtual ActionResult AddCommand(string cmd) 

자바 스크립트 전화 :

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

그런 식으로 당신이 돈을

public virtual ActionResult AddCommand(string id) 

당신이 그것을 바꿀 수 : 순간 나는 당신에게 조치를 추측하고있어처럼 보인다 인코딩에 대해 걱정할 필요가 없습니다.

더 나은 방법은 문자열이 아닌 데이터베이스 항목 ID를 전달하는 것입니다. 이것은 아마뿐만 아니라 귀하의 DB를위한 더 나은 성능 것입니다.

관련 문제