문제

내 견해에 다음과 같은 액션 링크가 있습니다

<%= Html.ActionLink("LinkText", "Action", "Controller"); %>

다음 URL을 만듭니다 http://mywebsite.com/controller/action

마찬가지로 끝에 ID를 추가한다고 가정 해 봅시다. http://mywebsite.com/controller/action/53 페이지로 이동하십시오. 이 페이지에는 위에 지정한 마크 업이 있습니다. 이제 URL을 보면 다음과 같이 보입니다.

http://mywebsite.com/controller/action/53 (신분증 추가)

하지만 나는 그것이 ID를 제거하고 원래 그랬던 것처럼 보이고 싶다. http://mywebsite.com/controller/action (여기에 신분증이 없음)

내가 이것을 어떻게 고칠 수 있는지 아이디어가 있습니까? 컨트롤러/작업이 변경 될 수 있으므로 하드 코딩 된 URL을 사용하고 싶지 않습니다.

도움이 되었습니까?

해결책

해결책은 내 자신의 경로 값을 지정하는 것입니다 (아래 세 번째 매개 변수)

<%= Html.ActionLink("LinkText", "Action", "Controller", 
    new { id=string.Empty }, null) %>

다른 팁

두 번째 "조치 전용"경로를 등록하고 html.routelink ()를 사용해야하는 것 같습니다. 먼저 응용 프로그램에서 이와 같은 경로를 등록하십시오.

routes.MapRoute("ActionOnly", "{controller}/{action}", 
   new { controller = "Home", action = "Index" } );

그런 다음 ActionLink 대신 해당 링크를 작성합니다.

Html.RouteLink("About","ActionOnly")

문제는 현재 진행중인 URL에서 내장 된 메소드와 제공되는 내용의 입력이 내장 된 것입니다. 당신은 이것을 시도 할 수 있습니다 :

<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>

ID 매개 변수를 수동으로 닦아야합니다.

이유를 모르지만 나에게는 효과가 없었습니다 (아마도 MVC2 RC 때문에). 생성 된 urlHelper 메소드 =>

 public static string
            WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues)
        {
            var rv = helper.RequestContext.RouteData.Values;
            var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList();
            foreach (var ignoredValue in ignoredValues)
                rv.Remove(ignoredValue.Key);
            var res = helper.Action(action);
            foreach (var ignoredValue in ignoredValues)
                rv.Add(ignoredValue.Key, ignoredValue.Value);
            return res;
        }

어떤 값을 명시 적으로 재정의 해야하는지 모르거나 추가 매개 변수 목록을 피하려면 아래와 같은 확장 방법을 사용할 수 있습니다.

<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>

구현 세부 사항은 다음과 같습니다 이 블로그 게시물에서

조치 이름을 "action/"로 명시 적으로 설정했습니다. 해킹처럼 보이지만 빠른 수정입니다.

@Html.ActionLink("Link Name", "Action/", "Controller")

또 다른 방법은 ActionLink (htmlHelper, String, String, RoutEvaluedictionary) 과부하를 사용하는 것입니다. 그러면 마지막 매개 변수에 null을 넣을 필요가 없습니다.

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>

HTML.ActionLink의 오버로드는 이후 버전의 MVC에서 변경됩니다. MVC 5 이상. 이것이 다음을 수행하는 방법입니다.

@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)

참고 ID 매개 변수의 경우 "" ", Htmlattributes의 경우 NULL을 전달했습니다.

동적이 되려면 메뉴 링크가 필요했습니다. 모든 페이지마다 많은 추가 코드와 라우팅을 구현하는 대신 간단한 HTML 도우미를 분배했습니다.

<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top