2009-12-11 2 views
2

가능한 정수 ID를 가로 채서 해시 뒤에 배치하려는 작업이 있습니다. (나는 그 id를 다루는 자바 스크립트를 가지고있다.) 나는 id와 같은 URL 해커를 위해서만이 여분의 단계를 수행하고 있는데, id 이전에 해시를 넣는 제 규칙을 잊어 버릴 수도 있습니다.ASP.NET MVC - 전달 된 ID가 포함되지 않은 현재 작업에 대한 URL 가져 오기

public ActionResult Edit(int? id) 
{ 
    if (id != null) return Redirect(Url.Action("Edit") + "/#" + id); 

    return View(); 
} 

문제는 Url.Action 방법은 전달 된 ID를 유지된다는 점이다 :

여기 내 작업입니다. Url.Action ("Edit")이 "{controller}/Edit/{id}"를 반환합니다. "{controller}/편집"만 반환하면됩니다. (그리고 내 코드는 "/ # {id}"를 추가로 추가하고있다). 예를 들어

,이 URL에 대한 요청 :

http://localhost:2471/Events/Edit/#22 

:

http://localhost:2471/Events/Edit/22/#22 

내가 그것을이 URL로 리디렉션 할 :

http://localhost:2471/Events/Edit/22 

이 URL로 리디렉션됩니다 나는 좌절했다. 누구든지 전달 된 ID를 포함하지 않는 현재 작업 URL을 얻는 방법을 알고 있습니까?

+0

해결 방법이 있습니다. Url.Action ("blahblah")으로 Url.Action ("Edit")을 대체하십시오 ("blahblah", "Edit"). –

답변

1

이렇게하는 한 가지 방법은 컨트롤러 동작에 대한 경로를 정의하는 것입니다. 예를 들어 경로는 "{controller}/{action} /"으로 정의됩니다. 다음과 유사한 내용을 사용하여 실제 URL을 만드십시오.

Url.RouteUrl("MyRoute") + "#" + id 

가장 좋은 방법은 아니지만 작동합니다. 어쩌면 언젠가 Microsoft는 라우팅에 단편 지원을 추가 할 것입니다.

0

나는 ... 예를 들어 100 % 확실하지 않다 (그리고 테스트하는 내 dev에 기계가없는),하지만 난 당신이 id 매개 변수 내에서 해시를 통과 할 수 있다고 생각하고 그것은 작동합니다 :

Url.Action("Edit", "Events", new { id = "#" + id }); 

또는 동일한 방식으로 RedirectToAction()을 사용할 수 있습니다.

대안은 Route {controller}/{Action}/# {id}를 정의한 다음 대신 Url.Route()를 사용하는 것입니다.

+0

흠, 가깝지만 "#"을 URL 인코딩합니다. 그래서 리다이렉트는/Events/Edit/% 2322 –

+0

으로갔습니다. {controller}/{action}/# {id}에 대한 경로를 정의하려고했지만 "#"을 다시 URL 인코딩합니다. –

+0

D' oh, URL 인코딩에 대해 생각하지 않았습니다. 내 마지막 제안은 당신이 연결할 수있는 ID를 전혀 포함하지 않는 경로를 정의하는 것이라고 생각합니다. 예를 들어 "{controller}/{Action} /"경로를 지정한 다음 "# id"를 고정시킵니다. –

관련 문제