문제

다음과 같은 이유는 무엇입니까? Html.ActionLink 전화:

Html.ActionLink("Approve", "Advance", new { id = Model.ID, step = StepType.Approve })

"RESTFUL"URL이 아닌 쿼리 매개 변수가있는 URL을 생성합니다.

http://localhost/Website/Case/Advance/1?step=Refer

기본 경로 만 등록되어 있습니다. "STEPTYPE"매개 변수가 무엇인지 이해할 수있는 추가 경로가 필요합니까?

이 경로를 추가하려고 시도했습니다 ~ 후에 기본 경로 :

routes.MapRoute(
    "CaseAdvance",
    "{controller}/{action}/{id}/{step}",
    new {controller = "Case", action = "Advance", id = "", step = StepType.Refer});

그러나 그것은 효과가 없었습니다. 새로운 경로 등록 추가 ~ 전에 기본값은 나에게 오류를 주었다.

매개 변수 dictionary에는 메소드 '시스템에 대한 nullable type'system.int64 '의 매개 변수'id '에 대한 null 항목이 포함되어 있습니다. '. 매개 변수 선택을 만들려면 유형이 참조 유형이거나 무효 유형이어야합니다.

도움이 되었습니까?

해결책

현재 너무 많이 잡는 맞춤형 경로

당신의 예외는 당신의 사용자 정의 경로가 당신이 잡으려고하지 않은 것을 잡고 있음을 알려줍니다. 따라서 응용 프로그램 루트 URL에 요청이있는 경우 :

http : // localhost/웹 사이트

당신의 맞춤형 경로는 그것을 잡을 것입니다. 기본값을 설정합니다. 그리고 당신에게 전화하십시오 CaseController.Advance() 동작. 물론 예외를 던지기 때문에 id 정의되지 않았습니다.

사용자 정의 경로를 기본 경로 앞에 보관하십시오

그러나 사용자 정의 경로를 변경하거나 경로 제약 조건을 추가해야하므로 실제로 잡을 수있는 요청 만 포착해야합니다.

그러나 어떤 변화를해야합니까? 변경하는 것보다 필요한 단일 컨트롤러 만있는 경우 :

routes.MapRoute(
    "CaseAdvance",
    "Case/{action}/{id}/{step}",
    new { controller = "Case", action = "Advance", id = "", step = StepType.Refer});

다른 컨트롤러가 우물이 있다면 그대로 유지할 수 있습니다. 제약 조건을 추가하십시오.

routes.MapRoute(
    "CaseAdvance",
    "{controller}/{action}/{id}/{step}",
    new { controller = "Case", action = "Advance", id = "", step = StepType.Refer},
    new { controller = "Case|Other" });

컨트롤러가있을 수있는 경우 ID가 숫자가되도록 요구할 수 있습니다.

routes.MapRoute(
    "CaseAdvance",
    "{controller}/{action}/{id}/{step}",
    new { controller = "Case", action = "Advance", id = "", step = StepType.Refer},
    new { id = @"\d+" })

이 경우이 경로는 실제로 ID가 정의 된 요청 만 포착합니다. 물론 여러 가지.

당신은 어느 것이 당신에게 가장 적합한 지 알게 될 것입니다.

다른 팁

예, "{controller}/{action}/{id}/{step}"과 같은 경로가 없으면 ActionLink 메소드는 간단히 "step"을 쿼리 스트링 매개 변수로 전달합니다.

경로에서 StepType의 매개 변수를 지정했지만 Step라는 매개 변수를 전달했습니다.

ActionLink 매개 변수 이름은 경로 매개 변수 이름과 일치해야합니다. 그렇지 않으면 보는 것을 정확하게 얻을 수 있습니다.

편집 : 좋아, 내가이 답변을 입력하는 동안 코드를 변경했습니다 !!

사용해보십시오 루 링크 그리고 그것이 당신에게 효과가 있는지 확인하십시오.

Html.RouteLink("Approve", "CaseAdvance", new { controller = "Case", action = "Advance", id = Model.ID, step = StepType.Approve })

RouteLink 호출이 유효한 링크를 생성하면 최소한 경로가 올바르게 설정되는 것을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top