2017-11-20 3 views
1

routeValues없이 작성된 action 링크가 있고 routeValue로 해당 페이지를로드하면 지정된 MVC가 actionlink를 잘못 작성합니다. [Route("reviews/{reviewId}")]routeValues와 함께로드되는 routeValues가없는 Actionlink

내가 escpecially 그것이 routeValue에 의해로드되는 동적 콘텐츠 페이지 나누기 경우이 문제가 있었다 :

나는이 같은 URL 뭔가를 지정 MVC 속성뿐만 아니라 라우팅과 정확히 같은 버그가 있었다 동일한 페이지에서 동적 액션 결과를 가리키는 여러 액션 링크가있는 경우

그래서 여기에 예제가 있습니다. 왜 이런 일이 일어나고 문제를 해결할 수 있는지 설명 할 수 있습니까? 페이지가 실제로 예상치 못한 방식으로 작동하면 MVC의 버그라고 생각합니다.

조치 결과 (그것의 기본 콘텐츠 페이지에 기본적으로 어떤 ID가 제공되지 않은 경우) : 레이아웃에

public ActionResult Index(string id) 
     { 
      if (id == "" || id == null) { 
       id = "About-Us"; 
      } 
      ContentPage cp = LookupContentPage(id); 
      return View(cp); 
     } 

액션 링크/페이지

<ul class="nav navbar-nav"> 
    <li>@Html.ActionLink("About Us", "Index", "Home")</li> 
    <li>@Html.ActionLink("Terms and Conditions", "Index", "Home", new { id = "Terms and Conditions" }, null)</li> 
    <li>@Html.ActionLink("User Stories", "Index", "Home", new { id = "User Stories" }, null)</li> 
</ul> 

지금 여기에있는 확인하는 방법 곤충.

<ul class="nav navbar-nav"> 
    <li><a href="/">About-Us</a></li> 
    <li><a href="/Home/Index/Terms%20and%20Conditions">Terms and Conditions</a></li> 
    <li><a href="/Home/Index/User%20Stories">User Storeies</a></li> 
</ul> 

이 내가 기대하는 결과가 아닌 ID가 제공되는 경우는 내 기본 가치를 구현 : 초기 페이지로드에서 앵커 태그는 다음과 같이로드합니다. 그러나 ID를 포함하는 페이지 중 하나를 탐색 한 후에 이 같은 http://localhost:57722/Home/Index/User%20Stories

순자산로드 : 당신의 URL은 다음과 같습니다 경우에 따라서

<ul class="nav navbar-nav"> 
    <li><a href="/Home/Index/User%20Stories">About Us</a></li> 
    <li><a href="/Home/Index/Terms%20and%20Conditions">Terms and Conditions</a></li> 
    <li><a href="/Home/Index/User%20Stories">User Stories</a></li> 
</ul> 

당신은이 아이디없이, 내가 의도적으로 비어있는 작업 링크를 한 brocken있다 볼 수 있듯이 그래도 액션 링크에 지정하지 않은 자체 URL을 작성하고 작성한 경우에는 기본값을로드해야합니다. 나는 이것이 MVC의 버그라고 생각한다. 비록 당신이 동적 인 페이지를 가지지 않거나 defualt 등으로 디폴트를 가지고 있다고해도 나는 그것이 행동 링크를 잘못 작성한다는 사실을 브로큰이라고 느낍니다.

사용자가 ID를 비워두고 동일한보기를 반환하는 다른 ActionResult에서 동적 콘텐츠를로드하는 경우 기본 페이지에 대한 별도의 ActionResult를 만들어이 문제를 해결했습니다.

EDIT 1

난 그냥 의견 제안되었을 때 routeValues에 NULL를 추가하고 여전히 파괴되어

<li>@Html.ActionLink("About Us", "Index", "Home", null,null)</li> 

        <li>@Html.ActionLink("Terms and Conditions", "Index", "Home", new { id = "Terms and Conditions" }, null)</li> 
        <li>@Html.ActionLink("User Stories", "Index", "Home", new { id = "User Stories" }, null)</li> 
아웃이 함께 링크로 이동 한 후 다음과 같이두고

routeValue

<ul class="nav navbar-nav"> 
        <li><a href="/Home/Index/Terms%20and%20Conditions">About Us</a></li> 

        <li><a href="/Home/Index/Terms%20and%20Conditions">Terms and Conditions</a></li> 
        <li><a href="/Home/Index/User%20Stories">User Stories</a></li> 
       </ul> 
+0

잘 모르겠습니다. 문제를 완전히 이해하고 있습니다. 그러나 당신은 항상 url/model 상태 사전에서 사용하지 않도록'null' 경로 값을 explcitly 전달할 수 있습니다. – Shyju

+0

@Shyju 내가 방금 만든 질문을 참조하십시오. 명시 적으로 null을 쓰는 것은 여전히 ​​해가됩니다. – Harry

답변

2

segmen과 함께 기본 경로를 사용하므로 경로 값이 추가됩니다. t는 id 값 (예 : url: {controller}/{action}/{id}). 문제는 의도적으로 설계된 것이며 URL을 생성하는 모든 방법 (예 : Html.BeginForm()도 마찬가지 임)입니다.

경로 값을 제거하기 위해, 당신은 인수로 null를 사용하여 기본값을 사용하는 의미 new { id = "" }

@Html.ActionLink("About Us", "Index", "Home", new { id = "" }, null) 

주를 사용할 수 있습니다. 동일한 URL을 생성 할 수도 있습니다.

@Html.ActionLink("About Us", null, null, new { id = "" }, null)