2014-12-08 7 views
0

MSVC4에서 허용되는 링크 생성 방법은 /Controller/Action/parameter입니까? MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 ​​방법

routes.MapRoute(
    "CommissionPayment", _ 
    "GetDocument/CommissionPayment/{DocID}", _ 
    New With {.controller = "GetDocument", .action = "GetOBDocument"}, _ 
    New With {.DocID = "\d+"} _ 
    ) 

RouteConfig.vb

http://localhost:56869/GetDocument/CommissionPayment?DocID=5511972 

나는이 있습니다

나는 ...의 .ascx이를 반환

<%=Html.ActionLink(linkText:=doc.DocumentName, _ 
        actionName:="CommissionPayment", _ 
        controllerName:="GetDocument", _ 
        routeValues:=New With {.DocID = doc.DocumentID}, _ 
        htmlAttributes:=Nothing) 
        %> 

을 ...이 있습니다. .. 그리고이 URL은 GetDocument 컨트롤러에서 GetOBDocument 메서드를 올바르게 호출합니다.

http://localhost:56869/GetDocument/CommissionPayment/123123123 

그러나 ActionLink 호출로 반환 된 "? DocID = 123"이있는 URL은 아무 것도 호출하지 않습니다. 그것은 잘못된 쓰레기입니다. "자료를 찾을 수 없다". 그것은 CommissionPayment 라우트의/\ d + 패턴과 일치하지 않기 때문에 서버가 CommPayment 액션을 찾지 못하기 때문입니다. 존재하지 않습니다.

분명히 maproute 일을 생략하고 ?DocID을 사용하거나 직접 URL을 쓸 수 있습니다. 사용자가 파일을 다운로드하고 양식이 다운로드 한 파일 이름을 제어하도록 브라우저를 속일 수 있기 때문에 아마도 후자 일 것입니다.

하지만 여기서 무슨 일이 일어나고 있는지 알고 싶습니다. 경로의 정의에서

답변

1

이 조치는 Html.ActionLink를 사용하는 경우 그래서 당신이 액션 이름으로 대신의 CommissionPayment을 제공해야 GetOBDocument 다음과 같이 정의된다

<%=Html.ActionLink(linkText:=doc.DocumentName, _ 
       actionName:="GetOBDocument", _ 
       controllerName:="GetDocument", _ 
       routeValues:=New With {.DocID = doc.DocumentID}, _ 
       htmlAttributes:=Nothing) 
       %> 
+0

와우. 그거였다. 감사. –